带有Python3的ANTLR4:" IndentationError:意外缩进"

时间:2017-10-27 22:20:45

标签: python parsing antlr python-3.4 antlr4

我正在学习使用Python 3.4.2的ANTLR4,我的目标只是在规则的{}内编写多行Python代码。当我定义解析器的规则时,我有以下代码块:

...
term
    : term '*' fact
    | term '/' fact 
    {
print('a')
    }
    | fact
      {
print('b')
      }
    ;
...

哪个不编译并引发" 打印(' a')IndentationError:意外缩进"。我试图理解,我发现以下代码块不会引发任何错误:

...
term
    : term '*' fact
    | term '/' fact 
    {print('a')}
    | fact
      {
print('b')
      }
    ;
...

当我使用一个操作数而不是2个操作数时,它就好像没问题。

为什么?

我在互联网上进行了自己的搜索,但我没有发现任何类似的情况。

1 个答案:

答案 0 :(得分:0)

好的,我找到了似乎有用的东西:

...
term
    : term '*' fact
    | term '/' fact 
      {print('a1')}
      {print('a2')}
    | fact
      {print('b1')}
      {print('b2')}
    ;
...

它也可以缩进:

...
term
    : term '*' fact
    | term '/' fact 
      {if True:}
      {    print('a1')}
      {    print('a2')}
    | fact
      {print('b1')}
      {print('b2')}
    ;
...