編譯原理中如何寫出正規表達式
Ⅰ 編譯原理中,a和b的個數相等的正則表達式該怎麼寫
判定a和b的個數相等不能使用正則語言,需要使用上下文無關語言,下推自動機利用堆棧記憶和處理a和b的個數之間的關系。
所以沒有能夠描述你所要求的正則表達式。
Ⅱ [編譯原理]構造一個正則表達式,它接受S={a, b, c}上符合以下規則的字元串:
(1)如果以a開頭,則串內至少包含一個c ----> 可以寫成a(a|b|c)*c(a|b|c)*
(2)如果以b開頭,則串內至多包含一個 a ----> 有兩種情況,一個是不包含a,可以寫成b(b|c)*;另一個是只有一個a,可以寫成b(b|c)*a(b|c)* ,結合起來就是b(b|c)* | b(b|c)*a(b|c)*
(3)綜合前面(1)和(2),有
a(a|b|c)*c(a|b|c)* | b(b|c)* | b(b|c)*a(b|c)*
Ⅲ 編譯原理這個正規表達式是怎麼寫出來的呀
主要就是後面的兩個條件:
至少2個1,
任何2個1之間有偶數個0
abd都不滿足第2條
Ⅳ 編譯原理正則表達式化簡
你好,語言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)是一種用來描述正則語言的更緊湊的表示方法。
Ⅳ 【編譯原理】構造下述文法G[S]的確定有限自動機,並給出該文法的語言的正規表達式 S->Aa|ε A->Aa|Sb|a
通過聯立方程組求正規表達式:
A = Aa|Sb|a = Aa|(Aa|ε)b|a= Aa+(Aa+ε)b+a=Aa+(Aab+b)+a=Aa+Aab+b+a=A(a+ab)+(b+a)
根據方程X=Xt+r 必有X=t*r解的論斷,可得A=(a+ab)*(b+a),進而可求得:
S = Aa|ε = Aa+ε = Aa = (a+ab)*(b+a)a = (a|ab)*(b|a)a
即文法的正規表達式為: (a|ab)*(b|a)a。
注意:以上求解的過程中「|」和「+」是等價的,都表示「或」的意思,它們的相互替換是為了描述的方便。
Ⅵ 【編譯原理】第三章:詞法分析
語言
正則表達:
正則表達式可以由較小的正則表達式遞歸構建。每個正則表達式r定一個語言記作L(r)。
正則表達式優先順序為:克林閉包>連接>或。
簡單來說就是重定義。
例如:
letter -> 字母
number -> 數
d -> 整數
系統根據 當前狀態 與 當前的輸入信息 決定 後繼行為 。
每當處理完當前輸入後,狀態也發生改變。
如果給定輸入串x,如果存在對於該串 從初始狀態到某個終止狀態 的轉換序列,則該串被該FA 接收 。
例:對於FA
abbaabb 是被接收的,而 abbaaba 則不被接收。
重點: 轉換表 ;
一個有窮自動機可以由轉換表表示。
例:
以上兩種自動機都可以用正則表達式 來表示。
事實上, 正則表達式與有窮自動機是等價的 。
從人的角度看,NFA比DFA更加直觀;但對於程序來說,DFA比NFA容易實現。
直接從RE轉換到DFA是比較困難的,所以一般通過NFA作為中介。
DFA中的每個狀態都是NFA中狀態集合的一個子集。
即,先寫出NFA的轉換表,再通過新的狀態構建出DFA。
例:
記數字為 ,字母為 ,那麼標識符的正則表達式為:
這個正則表達式轉換為NFA,表示如下:
這個NFA同時也是一個DFA,所以不用再進行轉換。
記:
數字
數字串
小數部分
指數部分
數
即一個數由一個數字串+可選的小數部分+可選的指數部分構成。
轉換為NFA,表示如下:
通過子集構造法,將NFA轉換為DFA:
可以表示10進制、8進制、16進制的DFA:
Ⅶ 編譯原理與實踐中正規表達式的問題
(aa|b)*
由連續兩個a或一個b的任意序列組成的語言,比如aab,baaaabbbb.
(a|bb)*
連續兩個b或一個a的任意序列。
正則語言里,|表示任選,有時也用+號。*號表示閉包--就是說任意組合。
Ⅷ 計算機編譯原理 求正規文法對應的正規式
正規式:a(a丨b)*
正規集:就是表示必須以終結符a開始,後面可以出現若干個a或b(包括0)的連續的串
這個題目是7個一起的 不是7道題,S為開始文法,後面都是連著的