一、詞法分析器的作用
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 是如何交互的。
詞素與正則表達式進行匹配時還要遵循最長前綴匹配原則。
前綴相同時要遵循優先匹配原則。
三、正則表達式 -> 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 *