/ / ANTLR: ottiene la rappresentazione del testo di una regola sub lexer - analisi, antlr4

ANTLR: ottieni la rappresentazione del testo di una regola sub lexer - parsing, antlr4

prendere in considerazione le seguenti regole del lexer in ANTLR4:

ID: [a-z]+;
INT: [0-9]+;
ARRAY: ID "[" INT "]";

E 'possibile in uno scenario di tree walking a cui ho accesso ctx.ARRAY() (dove ctx è una sottoclasse di ParserRuleContext che è stato generato da una regola parser) per ottenere la rappresentazione testuale delle regole del lexer ID e INT? Attualmente sto recuperando l'intera rappresentazione del testo con ctx.ARRAY().getText() e analizzare il contenuto di ID e INT usando regex e chiedevo solo se c'è una soluzione "pulita" pronta all'uso che fornisce ANTLR.

Nota: a causa delle dipendenze esterne ARRAY una regola parser non è un'opzione.

Grazie in anticipo per le risposte significative.

risposte:

3 per risposta № 1

Le regole di Lexer in ANTLR 4 non possono essere suddivise inparti. Questa è stata una decisione progettuale che abbiamo fatto come parte di un enorme miglioramento della velocità e della memoria per i lexer ANTLR 4 rispetto ai lexer ANTLR 3. I lexer ANTLR 3 erano riconoscitori ricorsivi di discendenza con molte delle stesse funzionalità dei parser. In ANTLR 4, il lexer non è nient'altro che un riconoscitore DFA con supporto per i predicati semantici, quindi i contorni tra i singoli componenti di un token non vengono tracciati affatto.

Dovrai o fare ARRAY una regola di parser, o analizzare separatamente il risultato di getText() quando è necessario suddividere il testo del token.