1.3 正则 与 词法表示
从现在开始,我们以一种新定义的语言 Tiger 为例。我们使用正则表达式来定义 Tiger 的词法。
Tiger 的 Token 定义如下:
- KEYWORD:
"else" | "if" | "let" | "var" | "type" | "for" | "function" | "do" | "while" | "then" | "end" | ...
; - NUMBER:
[0-9]+
(某些编程语言的 re 库中表示为\d+
); - ID:
[a-zA-Z_][a-zA-Z_0-9]*
; - WHITESPACE:
(' ' | '\t' | '\n')+
(re:\s
); - LEFTPAR / RIGHTPAR:
'('
/')'
; - OPERATORS:
'+' | '-' | '*' | '/'
; - ……
可能有些 Lexeme 符合多种 token 的定义,因此会规定 token 优先级。
规定了一种语言的词法,接下来要考虑的是如何实现。那么如何实现正则表达式?答案是采用一种特殊的数据结构:有限自动机(FA)。
总体路径如下:
RegExp -> NFA -> DFA -> Tables
;