Skip to main content

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