繁体   English   中英

解析antlr4中的歧义

[英]parsing ambiguity in antlr4

我试图识别列表推导表达式,例如a for b in c for d in e并且我有以下语法:

iter : 'for' ID 'in' expr ;

expr : ID 
     | expr iter+  # listcomp
     | ID + ID   # binary
     ;

但是给定a for b in c for d in e被解析为:

(a for b in (c for d in e))

即, listcomplistcomp

而不是:

(a (for b in c) (for d in e))

即,一个带有两个iterlistcomp 我应该如何改变语法以获得这种效果?

关联性解决了歧义:

grammar Compre;
program: iter+;
iter :  expr (forr ID inr expr)+  ;
expr : ID             # IdExpr
     | expr iter+     # listcomp
     | expr '+' expr  # BinaryExp
     | NUM            # NumExpr
     ;
forr : <assoc=left>'for' ;
inr : <assoc=right> 'in'     ;
NUM : [0-9]+;
ID : [a-z];
WS : [ \t\r\n]+ -> skip;

在各种输入上尝试此语法。 它解析您提供的两个输入。 在此处输入图片说明

暂无
暂无

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

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