Sto implementando l'operatore punto / notazione che vedi nelle lingue ( obj.method();
) con ANTLR4.
Tutto funziona perfettamente (tranne una cosa), un semplice programma Hello World funziona:
module test;
sfunc main {
std->println(obj="Hello, World!");
}
->
in questa lingua è l'equivalente di .
in Java e molte altre lingue.
Se osservi la grammatica: qui
Noterai che la regola parser ( exprIdentifier
, quella che consente di usare ->
) supporta solo IDENTIFIER
s, il che significa che la notazione ->
funziona solo sugli oggetti che sono stati inseriti in variabili.
Significato:
a = 5;
a->test();
Funzionerebbe, ma:
5->test();
Non lo fare.
Cambiare il IDENTIFIER
s in expr
s non funzionerebbe anche perché causerebbe un errore "ricorsivo a sinistra" e sembrerebbe anche negativo:
5 + 5->test(); // not a good idea
La mia domanda è: cosa devo cambiare per risolvere il mio problema?