形式語言
在數學、邏輯和計算機科學中,形式語言(英語:Formal language)是用精確的數學或機器可處理的公式定義的語言。
如語言學中語言一樣,形式語言一般有兩個方面:語法和語義。專門研究語言的語法的數學和計算機科學分支叫做形式語言理論,它只研究語言的語法而不致力於它的語義。在形式語言理論中,形式語言是一個字母表上的某些有限長字符串的集合。一個形式語言可以包含無限多個字符串。
語言的形式定義
編輯字母表與字符串
編輯語言定義在某一個特定的字母表上,字母表(經常記作 Σ )可以為任意有限集合。例如集合 就表示所有小寫字母構成的字母表。
字符串是字母表中的元素構成的有窮序列,以之前定義的小寫字母表為例,「hello」,「wikipedia」,「abcjkg」都是上面的串,而「AbCd」就不是上面的串了。記號 ε 表示空串——它是一個特殊的長度為0的串。
語言
編輯直覺上,一個語言是字母表所能構成的所有串的集合的一個子集,具體來說:
對於任意一個字母表,記全體長度為 n 的子串為 ,特別的,規定 為{ε},則還可以定義
包含了字母表 所能構成的所有字符串。語言(一般記為 L )定義為 的任意子集。
下面給出一些語言的例子, 是一個包含兩個字符串的集合,也可以被視為小寫字母構成的字母表上的一個語言。而實際上研究的語言的例子則常常更為複雜,例如所有合法的C語言程序串構成的集合也可以視作ASCII上的一個語言(假定編譯器只支持英文符號)。
需要注意的一點是, 的空子集 ∅ 與只包含空串的語言 {ε} 是兩個不同的語言。
語言間的運算
編輯語言間的運算就是 Σ*冪集上的運算。
語言的表示方法
編輯不像自然語言,一個形式語言作為一個集合,需要有某種明確的標準來定義一個字符串是否是它的元素。這可以通過多種方法來完成,下面將給出一些例子:
枚舉法
編輯如果一個形式語言的元素數目是有限的,那麼可以通過枚舉它的各個字串來嚴格地定義它。
形式文法
編輯正則表達式
編輯正則表達式是一種很多編程語言和庫都支持的語法,這種語法可以用於匹配符合一定條件的字符串,經常用於文本的搜索和過濾。從名稱上來說,正則表達式應當是對應於正則語言的,在形式語言領域內所稱的正則表達式確實如此。不過,在實際的編程語言中,很多正則表達式已經通過引入複雜的擴展,可以匹配正則表達式所不能描述的內容。形式語言中的正則表達式和一般編程語言中所稱的正則表達式在語法上也有較大差異。
自動機
編輯直覺上來說,自動機消耗輸入符號,並在自身的不同狀態間轉移,可以通過狀態機消耗完整個字符串之後是否達到某些特定狀態來定義一個字符串是否屬於某一個語言。語言可以通過某種自動機來識別,比如圖靈機、有限狀態自動機。
參考文獻
編輯- Hamilton, A. G. Logic for Mathematicians. Cambridge University Press. 1978. ISBN 0-521-21838-1.
- Ginsburg, Seymour. Algebraic and automata theoretic properties of formal languages. North-Holland. 1975. ISBN 0-7204-2506-9.
- Harrison, Michael A. Introduction to Formal Language Theory. Addison-Wesley. 1978.
- Hopcroft, John E.; Jeffrey D. Ullman. Introduction to Automata Theory, Languages, and Computation. Reading, Massachusetts: Addison-Wesley Publishing. 1979. ISBN 0-201-02988-X.
- Rozenberg, Grzegorz; Arto Salomaa. Handbook of Formal Languages: Volume I-III. Springer. 1997. ISBN 3-540-61486-9.
- Suppes, Patrick. Introduction to Logic. D. Van Nostrand. 1957. ISBN 0-442-08072-7.
參見
編輯外部連結
編輯- Formal Language Definitions (頁面存檔備份,存於網際網路檔案館) website 1/24/04
- James Power, Notes on Formal Language Theory and Parsing (頁面存檔備份,存於網際網路檔案館), 29 November 2002.
- Alexandru Mateescu and Arto Salomaa, "Preface" in Vol.1, pp. v-viii, and "Formal Languages: An Introduction and a Synopsis", Chapter 1 in Vol. 1, pp.1-39 (頁面存檔備份,存於網際網路檔案館)
- Sheng Yu, "Regular Languages", Chapter 2 in Vol. 1 (頁面存檔備份,存於網際網路檔案館)
- Jean-Michel Autebert, Jean Berstel, Luc Boasson, "Context-Free Languages and Push-Down Automata", Chapter 3 in Vol. 1 (頁面存檔備份,存於網際網路檔案館)
- Christian Choffrut and Juhani Karhumäki, "Combinatorics of Words", Chapter 6 in Vol. 1
- Tero Harju and Juhani Karhumäki, "Morphisms", Chapter 7 in Vol. 1, pp. 439 - 510
- Jean-Eric Pin, "Syntactic semigroups", Chapter 10 in Vol. 1, pp. 679-746 (頁面存檔備份,存於網際網路檔案館)
- M. Crochemore and C. Hancart, "Automata for matching patterns", Chapter 9 in Vol. 2
- Dora Giammarresi, Antonio Restivo, "Two-dimensional Languages", Chapter 4 in Vol. 3, pp. 215 - 267