編譯原理正則表達式
A. 編譯原理中, regular expression (正則表達式)和regular language(正則語言)有什麼區別
正則表達式是對正則語言的一個描述。正則語言是一個集合,這個集合里的元素都滿足正則表達式描述的規則。
B. java中的正則表達式跟編譯原理有什麼聯系
首先,正則表達式不僅在Java里有,其它語言裡面也有,它是一個數學上的概念,各個語言中的正則表達式是它的不同形式的實現。
其次,編譯原理的詞法分析里,會用到正則表達式去匹配源程序中的各種token(記號),比如說
int a = 8;
里識別出:
類型名:int
變數名:a
運算符:=
數字:8
結尾分號:;
總之,二者有聯系,但不是一回事。
C. 編譯原理 正則表達式
/^(?!.*001)[01]+$/
D. 編譯原理:c語言標識符的正則表達式
C語言中的標識符:
標識符由字母、數字、下劃線「_」組成,並且首字母不能是數字.
java語言中的標識符:
標識符由字母、數字、下劃線「_」、美元符號「$」組成,並且首字母不能是數字。
一般標識符由字母、數字、下劃線「_」組成
如果只能以下劃線、英文字母開頭,後跟單詞字元的話:
^[A-Za-z_][A-Za-z0-9_]*$
E. 編譯原理中的正則表達式與正規表達式有什麼區別
完全相同,是對regular expression的不同翻譯
F. 正則表達式概述 什麼是正則表達式
正則表達式概述
正則表達式在程序設計語言中存在著廣泛的應用,特別是用來處理字元串。如匹配字元串、查找字元串、替換字元串等。可以說,正則表達式是一段文本或一個公式,它是用來描述用某種模式去匹配一類字元串的公式,並且該公式具有一定的模式。
本小節將介紹正則表達式的基本概念、第一個正則表達式,以及測試正則表達式的工具Code Architects Regex Tester。
什麼是正則表達式
正則表達式(Regular
Expression)起源於人類神經系統的早期研究。神經生理學家Warren McCulloch和Walter
Pitts研究出一種使用數學方式描述神經網路的方法。1956年,數學家Stephen
Kleene發表了一篇標題為「神經網事件的表示法」的論文,並在該論文中引入了「正則表達式」這一個概念。該論文稱正則表達式是:「正則集的代數」的表達式。因此,採用「正則表達式」這個術語。正則表達式的定義存在多種說法,具體如下:
正則表達式就是用某種模式去匹配一類字元串的公式,主要用來描述字元串匹配的工具。
正則表達式描述了一種字元串匹配的模式。它可以用來檢查字元串是否含有某種子串、將匹配的子串做替換或者從某個串中取出符合某個條件的子串等。
正則表達式是由普通字元(如字元a到z)以及特殊字元(稱為元字元)組成的文字模式。正則表達式作為一個模板,將某個字元模式與所搜索的字元串進行匹配。
正則表達式就是用於描述某些規則的工具。這些規則經常用於處理字元串中的查找或替換字元串。換句話說,正則表達式就是記錄文本規則的代碼。
正則表達式就是用一個「字元串」來描述一個特徵,然後去驗證另一個「字元串」是否符合這個特徵。
學過《編譯原理》的讀者可能知道不確定有限自動機(Non-deterministic
finite automaton,簡稱NFA)和確定有限自動機(Deterministic finite
automaton,簡稱DFA)。其實,正則表達式是一個不確定有限自動機。NFA和DFA的最大區別在於它們的狀態轉換函數。NFA可以對同一個字元串產生多種理解方式,而DFA則只有唯一的一種理解方式。也正因為如此,NFA在匹配過程中可能會回溯,NFA的效率一般要低於DFA。因此,在書寫正則表達式時盡量減少回溯來提高正則表達式的效率。
如果你使用過Windows或DOS下用於文件查找的通配符*和?,那麼你不難理解正則表達式。如果你需要查找所有Word文檔,那麼可能使用表達式*.doc。其中,字元*是一個通配符,它可以代表任意字元串。正則表達式和通配符具有相似性,它也可以使用一些字元(如字元.)表示任意字元。然而,它比通配符更具有精確性。
在正則表達式中,匹配是最常用的一個詞語,它描述了正則表達式動作結果。給定一段文本或字元串,使用正則表達式從文本或字元串中查找出符合正則表達式的字元串。有可能文本或字元存在不止一個部分滿足給定的正則表達式,這時每一個這樣的部分被稱為一個匹配。其中,匹配存在下面3種類型:
形容詞性的匹配,即一個字元串匹配一個正則表達式。
動詞性的匹配,即在文本或字元串里匹配正則表達式。
名詞性的匹配,即字元串中滿足給定的正則表達式的一部分。
正則表達式的應用非常廣泛,特別是在字元串處理方面。目前來說,正則表達式已經在很多軟體中得到廣泛了應用,如Linux、Unix、HP等操作系統,C#、PHP、Java等程序開發環境,以及很多的應用軟體中,都可以看到正則表達式的這樣或那樣的應用。正則表達式常見的應用如下:
驗證字元串,即驗證給定的字元串或子字元串是否符合指定特徵,譬如驗證是否是合法的郵件地址、驗證是否為合法的HTTP地址等。
查找字元串,從給定的文本中查找符合指定特徵的字元串,比查找固定字元串更加靈活方便。
替換字元串,即把給定的字元串中的符合指定特徵的子字元串替換為其他字元串,比普通的替換更強大。
提取字元串,即從給定的字元串中提取符合指定特徵的子字元串。
G. 編譯原理 不能被5整除的偶整數的正規文法和正規式
分析可知不能被5整除的偶整數的情況是所有兩位以上不以0結尾的偶數(2,4,6,8),不包括0。
因此,正則表達式為:([1-9][0-9]*[2,4,6,8])|[2,4,6,8]。正規文法為:
S-> A | [2,4,6,8]
A->B [2,4,6,8]
B->[1-9] C
C->[0-9] C | ε
H. 編譯原理正則表達式化簡
你好,語言L={a}{a,b}∗({ϵ}∪({.,_}{a,b}{a,b}∗))L={a}{a,b}
∗
({ϵ}∪({.,_}{a,b}{a,b}
∗
))
這個語言是指,由a開頭,後接任意長度的a、b串,然後再接空串(代表結束)。或者是接以.或_開頭的,後接長度大於等於1的a、b串。
正則表達式(Regular Expression, RE)是一種用來描述正則語言的更緊湊的表示方法。
I. 編譯原理中,a和b的個數相等的正則表達式該怎麼寫
判定a和b的個數相等不能使用正則語言,需要使用上下文無關語言,下推自動機利用堆棧記憶和處理a和b的個數之間的關系。
所以沒有能夠描述你所要求的正則表達式。
J. 編譯原理RG是什麼
RG是正則語言。
正則表達式RE與有限狀態自動機FSAM(或 NDAM)是等價的。
>一個語言L,如果能夠被正則表達式來表示則一定存在著對應的有限狀態自動機,能夠接收該語言(該語言就是FSL)
一個語言L,如果能夠被有限狀態自動機所接收,則一定存在著對應的正則表達式來代表該語言(該語言就是正則集);