因此,我一般先设计文法(也称语法), 在过程中考虑需要有哪些类型的词素....这里我们先确定两种基本的词素:
匹配字符, 即需要用于匹配的字符, 如单个字符, \ 引导的转义字符 ,\u 引导的 Unicode code point
控制字符, 不匹配, 具有特殊语义的字符 ,...字符需要占用 2 个 char, 所以一个超过 0XFFFF 的 Unicode 字符会被分割为两个词素....在前面的词法分析中, 我们将词素(后称终结符) 分为了两类:
匹配字符
控制字符
更进一步归纳:
匹配字符
控制字符
控制前面的字符(也可以是括号里的一个嵌套的表达式)重复多少次,如 *、?...但是在表达形式上, NFA 将这种二义性(或者说多种可能性)表现在转换上了; 而与之不同, DFA 将二义性表达在状态里, 多种可能性被聚合在状态里, 消除了转换的二义性.