編譯原理 RL 0文法的詞法分析器

2021-10-04 14:11:47 字數 1945 閱讀 4751

詞法分析的核心在於,將文法轉換為nfa再轉換為dfa,根據dfa識別出單詞的種別碼。

下面給出rl/0文法的詞彙表:

1.基本字:

begin, call, const, do, end,if, odd, procedure, read,then, var, while, write

對應的種別碼:

beginsym, callsym, constsym, dosym, endsym,ifsym, oddsym, proceduresym, readsym,thensym, varsym, whilesym, writesym

2.識別符號對應的種別碼:ident

3.常數對應的種別碼:number

4.運算子:

+, -, *, /, odd,=, <>, , >=, :=

對應的種別碼:

plus, minus, times, slash,oddsym,eql, neq, lss, leq, gtr, geq,becomes

5.界符

( ) , ;.

對應的種別碼:

lapren,raplen,comma,semicolon,period

下面是簡易的定義,注重過程,不在具體問題上糾結。

識別符號對應的正規式為:(a|…|z)星(0|…|9)星 (暫時不考慮下劃線)

而常數對應的正規式為:(1|…|9)(0|…|9)* (只考慮無符號的整數)

可以畫出nfa

由於很接近dfa,直接給出狀態轉換表:

據此可以完成編碼。

詞法分析流程圖:

詞法分析程式:

據此就可以編寫程式:

public class main 	

//詞法分析返回二元組

sb=new la().g(sb);

system.out.println(sb);

}}

public class la 

public la()

public int getblank(string a)

else if(flag==6||flag==3||flag==4)

else

}else

break;

}if(flag==5)

else if(flag==6)

else

}else if(flag==0)

else if(x<='z'&&x>='a')

else

}else if(flag==1||flag==2)

else

}else if(flag==3||flag==4)

else if(x<='9'&&x>='0')

else}}

return l;

} public int jy(int l,string a)

else if(s.equals(">")&&l=r) break;

l=jy(l,a);

"l="+l);

if(l>=r) break;

if(o==l)

o=l;

}} }

public stringbuffer g(stringbuffer a)

return tf;

}}

編譯原理 詞法分析器

1 從源程式檔案中讀入字元。2 統計行數和列數用於錯誤單詞的定位。3 刪除空格類字元,包括回車 製表符空格。4 按拼寫單詞,並用 內碼,屬性 二元式表示。屬性值 token 的機內表示 5 如果發現錯誤則報告出錯 6 根據需要是否填寫識別符號表供以後各階段使用 int tag 0 設立標誌 一開始本...

編譯原理,例 詞法分析器

編譯原理課作業要求自己寫乙個詞法分析器,我嘗試寫了一下。詞法分析 電腦科學中將字串行轉換為單詞 token 序列的過程。進行詞法分析的程式或者函式叫作詞法分析器 lexical analyzer 也叫掃瞄器 scanner 詞法分析器一般以函式的形式存在,供語法分析器呼叫。完成詞法分析任務的程式稱為...

編譯原理(一)詞法分析器

詞法分析器的功能是輸入源程式,輸出單詞符號。單詞符號是乙個程式語言的基本語法符號。程式語言的符號一般可以定義為以下幾種 關鍵字 是由程式語言定義的具有固定意義的識別符號,也稱這些識別符號為保留字或基本字。例如 c 語言中的define do for while if else等 識別符號用來表示各種...