簡體   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