有没有办法在PLY的语法中表明一个或多个?

时间:2013-07-10 05:10:30

标签: python grammar ply

我想写一个自然语法规则:

program = { expression }

其中{}表示1或更多。

例如,Lua的语法使用相同的语法:

chunk ::= {stat [`;´]} [laststat [`;´]]

这可能吗?这符合上下文无关语法吗?

2 个答案:

答案 0 :(得分:2)

我相信最简单的解决方案是:

program : expression
        | program NEWLINE expression

这只能起作用,因为PLY生成LR语法,非终结者不能在LL语法中自己开始(左递归)(如果你使用的是ANTLR之类的工具)

你也可以这样做:

program : expression
        | expression NEWLINE program

这第二个版本很好,因为它兼容LL和LR语法,但我相信第一个规则对LR解析器更有效。

答案 1 :(得分:0)

我找到了答案:

program : expression
        | expression NEWLINE expression