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 № 1Ok, 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")}
;
...