1

我想写一个性质的语法规则:

program = { expression }

其中{}表示 1 个或多个。

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

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

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

4

2 回答 2

2

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

program : expression
        | program NEWLINE expression

这仅适用于 PLY 生成 LR 语法,在 LL 语法中非终结符不能以自身开头(左递归)(如果您使用的是 ANTLR 等工具)

你也可以这样做:

program : expression
        | expression NEWLINE program

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

于 2013-07-10T06:26:49.740 回答
0

我找到了答案:

program : expression
        | expression NEWLINE expression
于 2013-07-10T05:59:50.183 回答