在antlr4
问题描述:
解析歧义我试图识别列表理解这样的表达式a for b in c for d in e
和我有以下语法:在antlr4
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))
即listcomp
的listcomp
而不是:
(a (for b in c) (for d in e))
即,具有两个iter
s的单个listcomp
。我应该如何改变语法来获得这种效果?
谢谢。我希望不要添加括号来解决含糊不清的问题(我认为它具有相关性?),就像在标准的python中一样。 – JRR
谢谢@TomServo。我实际上需要修改我的语法(参见上文),它允许'listcomp'采用python中的'expr'而不是'ID'(例如,'1 + x for x in l')。这似乎破坏了你的解决方案:( – JRR
@JRR请看我最近的编辑。这也处理表达式在开始。 – TomServo