我正在尝试编写一个正则表达式引擎。我想手写递归下降解析器。对于正则表达式语言(不是可以由正则表达式描述的语言),没有左递归的上下文无关文法会是什么样子?最简单的方法是重构语法糖,即将a+
改为aa*
吗?提前致谢!
我正在尝试编写一个正则表达式引擎。我想手写递归下降解析器。对于正则表达式语言(不是可以由正则表达式描述的语言),没有左递归的上下文无关文法会是什么样子?最简单的方法是重构语法糖,即将a+
改为aa*
吗?提前致谢!
左递归:
Expression = Expression '|' Sequence
| Sequence
;
Sequence = Sequence Repetition
| <empty>
;
右递归:
Expression = Sequence '|' Expression
| Sequence
;
Sequence = Repetition Sequence
| <empty>
;
不明确的形式:
Expression = Expression '|' Expression
| Sequence
;
Sequence = Sequence Sequence
| Repetition
| <empty>
;
左递归的维基百科文章提供了如何实现这一点的相当不错的信息。