Implementare correttamente la notazione dot con i visitatori di ANTLR4?

1

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?

    
posta Midnightas 09.09.2016 - 20:03
fonte

0 risposte

Leggi altre domande sui tag