我想写一个自然语法规则:
program = { expression }
其中{}
表示1或更多。
例如,Lua的语法使用相同的语法:
chunk ::= {stat [`;´]} [laststat [`;´]]
这可能吗?这符合上下文无关语法吗?
答案 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