首页 > 解决方案 > antlr的python目标中的错误

问题描述

antlr-4.9生成的python代码有一些语法问题。例如,对于以下 antlr 语法:

e returns [ObjExpr v]
    : a=e op=('*'|'/') b=e  {
$v = ObjExpr($op.type)
$v.e1 = $a.v
$v.e2 = $b.v
}
    | INT                   {
$v = ObjExpr(21)
$v.i = $INT.int
}
    ; 

MUL : '*' ;
DIV : '/' ;
INT :   [0-9]+ ;
NEWLINE:'\r'? '\n' ;
WS  :   [ \t]+ -> skip ;

生成的代码是:

    localctx.v = ObjExpr((0 if localctx.op is None else localctx.op.type())
    localctx.v.e1 = localctx.a.v
    localctx.v.e2 = localctx.b.v

而正确的代码应该是:

localctx.v = ObjExpr((0 if localctx.op is None else localctx.op.type))
localctx.v.e1 = localctx.a.v
localctx.v.e2 = localctx.b.v

即代码缩进错误,大括号数不匹配。手动编辑生成的解析器文件以修复这些错误使代码正常运行。如何报告此错误并修复它?

标签: python-3.xantlr4

解决方案


推荐阅读