描述正则表达式的无上下文语法?

时间:2009-06-10 20:12:10

标签: regex language-agnostic syntax context-free-grammar

我正在尝试编写正则表达式引擎。我想手工写一个递归下降解析器。没有正则表达式语言(不是正则表达式可以描述的语言)的左递归的无上下文语法会是什么样的?是否最容易重新分解语法糖,即将a+更改为aa*?提前谢谢!

3 个答案:

答案 0 :(得分:7)

左递归:

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>
         ;

答案 1 :(得分:2)

您可以查看source code for Plan 9 grep。文件grep.y有一个yacc(如果我没记错的话,LALR(1))正则表达式的语法。您可能可以从yacc语法开始,并重写它以进行递归下降解析。

答案 2 :(得分:0)

关于Left Recursion的维基百科文章提供了关于如何解决此问题的非常好的信息。