詞法分析Ⅲ

正則表達式與正則文法的等價性

  1. 對任意一個正則表達式,存在定義同語言的文法
  2. 對任意一個正則文法,存在定義同語言的表達式

正則表達式轉換爲等價的正則文法

  1. 步驟
  • 引入開始符號 S,從如下正則定義式: S\rightarrowr
  • 按如下規則將S\rightarrowr分解爲新的正則定義式,在過程中根據需要引入新的語法變量
  1. 分解規則 A\rightarrowr
  • 如果 r=r1r2r_1r_2,則將A\rightarrowr分解爲A→r1r_1B ,B→r2r_2,B∈V
  • 如果 r=r1r2r_1^*r_2,則將A\rightarrowr分解爲A→r1r_1A ,A→r2r_2
  • 如果 r=r1r2r_1|r_2,則將A\rightarrowr分解爲A→r1r_1 ,A→r2r_2
  1. 例子

正則文法轉換爲等價的正則表達式

  1. 步驟
  • 爲正則文法的每個產生式構造一表達方程,這些中變量是文法G中的語法變量,各變量係數是正則表達式簡稱爲方程式,從而得到一個聯立方程組
  • 用代入消元法去聯立方程組中除開始符號外的其他變量,最後得到關於開始符號 S的解: S = r,r即爲所求的正則表達式
  1. 構造方程式的規則
  • 對形如 A\rightarrow a1a2ama_1|a _2|…|a _m的產生式 ,構造方程A=a1a2ama_1|a_2|…|a_ m。其中可以有形如 A \rightarrowε
  • 對形如 A\rightarrow a1Aa2AamAa_1A|a _2A|…|a _mA的產生式 ,構造方程A=(a1a2am)A(a_1|a_2|…|a_ m)^*A
  • 對形如 A\rightarrow a1Ba2BamBa_1B|a _2B|…|a _mB的產生式 ,構造方程A=(a1a2am)B(a_1|a_2|…|a_ m)B,其中 B≠A 。
  1. 消元規則
  • 如果有 A=(r1r2rn)B(r_1|r_2|…|r_ n)B ,B=(t1t2tm)C(t_1|t_2|…|t_ m)C ,則用 A=$(r_1|r_2|…|r_ n)(t_1|t_2|…|t_ m)C 進行換,其中 B≠A
  • 如果有 A=(r1r2rn)B(r_1|r_2|…|r_ n)B ,B=(t1t2tm)(t_1|t_2|…|t_ m) ,則用 A=$(r_1|r_2|…|r_ n)(t_1|t_2|…|t_ m) 進行換,其中 B≠A
  • 如果有A=(t1t2tm)A(t_1|t_2|…|t_ m)^*A , A=(r1r2rn)B(r_1|r_2|…|r_ n)B ,則用 A=(t1t2tm)(r1r2rn)B(t_1|t_2|…|t_ m)^* (r_1|r_2|…|r_ n)B進行替換
  • 如果有A=(t1t2tm)A(t_1|t_2|…|t_ m)^*A , A=r1r2rnr_1|r_2|…|r_ n ,則用 A=(t1t2tm)(r1r2rn)(t_1|t_2|…|t_ m)^* (r_1|r_2|…|r_ n)進行替換
  • 有 A=β1、A=β2…A=β h,則用 A=β1|β2|…|βh代替之。
  1. 例子
發佈了92 篇原創文章 · 獲贊 40 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章