本文对应的代码实现托管在 Github
light-regex
词法分析
词法分析的任务是把输入序列分割为词素单元....词素具有属性, 比如动词、名词、副词、形容词等, 这些属性决定了语法层面, 其在句子里可充当的成分....对于程序语言, 个人的感受是, 对词素并没有一个固定的边界定义, 如果词法分析阶段做的事少一点, 那么语法分析阶段做的事就要多一点, 考虑到语法分析要远比词法分析复杂, 所以后者应当为前者服务, 以尽可能减轻语法分析的复杂度...、+、{m,n}
二元表达式, |,&
观察以上3项,一个直觉上的规律是,后面的依次由前面的组成,于是得到如下文法:
primary_expr -> single_literal | '(' expr...而计算 Follow 集的前提是需要知道 First 集, 上例中, 在状态3处, 我们之所以知道
, 是因为开启了上帝视角(人工分析), 知道后继状态 4 接受 b.