2017-10-27 10 views
0

私はPython 3.4.2でANTLR4を学んでいます。ここでの目標はルールの{}内に複数行のPythonコードを書くことです。私は、パーサーのルールを定義するとき、私は、次のコードブロックを持っている:コンパイルして「:予期しないインデント印刷( 『A』)IndentationError」を提起しないANTLR4 with Python3:「IndentationError:予期しないインデント」

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

。私は理解しようとした私は、次のコードブロックは、いずれかのエラーをスローしないことが判明:

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

私は2つのオペランドと、オペランドを1つ使用しますがないときは、それはOKだったかのように動作します。

なぜですか?

私はインターネットで自分の検索を行いましたが、同様のケースは見つかりませんでした。

答えて

0

[OK]を、私は仕事に思える何かを発見した:

... 
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')} 
    ; 
... 
関連する問題