繁体   English   中英

我的语法中哪里有歧义?

[英]Where is the ambiguity in my grammar?

我有以下模棱两可的语法,其中大写字母规则用于简单的词汇标记:

program : function | function program
function : FN ID ARROW TYPE invariants DASH block
fn_call : ID L_PAREN CONSTANT R_PAREN


invariants : invariant | invariant invariants
invariant : TYPE ID COLON invariant_tests
invariant_tests : test | test COMMA invariant_tests
test : OPERATOR CONSTANT | STAR


block : expression | expression block
expression : loop | fn_call | assignment | def | constant
loop : FOR def IN CONSTANT COLON block
assignment : ID ASSIGN CONSTANT | ID ASSIGN ID
def : TYPE assignment

我收到8个shift / reduce错误(使用Python 2.7和PLY时)。

歧义是我如何定义“一个或多个”的结果。 block : expression | expression block block : expression | expression block

问题是我如何定义loop

loop : FOR def IN CONSTANT COLON block

因为解析器不了解该块是属于循环还是属于函数。

基本上,是悬而未决问题的另一个变体。

正如先前的发言者所说,您必须区分“块用法”。 例如,尝试:

loop : FOR def IN CONSTANT COLON block END FOR

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM