/ / ANTLR4 con Python3: "IndentationError: indent inaspettato" - python, parsing, antlr, python-3.4, antlr4

ANTLR4 con Python3: "IndentationError: indent inaspettato" - python, parsing, antlr, python-3.4, antlr4

Sto imparando ANTLR4 con Python 3.4.2 e il mio obiettivo qui è solo quello di scrivere più righe di codice Python all'interno di {} di una regola. Quando definisco le regole del mio parser, ho il seguente blocco di codice:

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

Che non compila e solleva "print ("a") IndentationError: rientro inattesoHo cercato di capire e ho scoperto che il seguente blocco di codice non genera alcun errore:

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

Funziona come se fosse ok quando ho usato un operando ma non con 2 operandi.

Perché ?

Ho fatto le mie ricerche su internet ma non ho trovato casi simili.

risposte:

0 per risposta № 1

Ok, ho trovato qualcosa che sembra funzionare:

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

ed è anche ok con indentation:

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