[編譯原理]1.詞法分析(lexical analysis)


一、詞法分析器的作用

1.識別源文件中的 space 和注釋並刪除;

2.識別源文件中的 lexeme;

3.用 token 來代替源文件中的 lexeme,token 的形式為 <token-name, attribute-value>;

  其中 attribute-value為可選項,例如對於常量60,token 即為 <60>,沒有attribute-value,

  而對於一個整型的變量,就需要有 attribute-value 來存儲諸如變量類型、變量值等信息。

  對於有 attribute-value 的 token,形式一般為 <token-name, ptr>,其中 ptr 為一個指針,指向存儲 attribute-value 的區域。

4.生成一張 symbol table,用於存儲某些 token 的 attribute-value,在 lexical analysis 以及之后的階段都需要用到這張 symbol table。

下面這張圖說明了 lexical analyzer, parser(syntax analyzer) 和 symbol table 是如何交互的。

 

二、如何解析 lexeme
lexeme analyzer 最主要的任務是識別 lexeme。
我們將 lexeme 分成兩大類,第一類包括關鍵字、運算符等,內容都是固定死的;第二類是標識符(identifier),即變量名,只需遵循變量名的模式(pattern)即可,內容不固定,事先不知道。
下面我們介紹兩種 lexeme analyzer 識別 identifier 和關鍵字的方法。
    第一種方法:
    事先將上述的第一類存入 symbol table,之后每識別出一個 lexeme 就先去查 symbol table,
    若該 lexeme 已在 symbol table 中,直接返回該 lexeme,否則先將 lexeme 插入 symbol table 再返回。
    第二種方法:
    為每一個關鍵字設計一個 FA,通過 FA 來判斷。

詞素與正則表達式進行匹配時還要遵循最長前綴匹配原則。

前綴相同時要遵循優先匹配原則。

 

三、正則表達式 -> NFA -> DFA

DFA不同於NFA的地方:

1.不能以 epsilon 作為 label

2.對於每個狀態 s 和每一個 symbol a,只有一條以 s 為出發點,以 a 為 label 的邊。

NFA -> DFA

 

 

 

RE -> NFA

1) r = s | t

 

2) r = s t

 

3) r = s *

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM