Sto imparando ANTLR4 e stavo cercando di giocare con le modalità lessicali. Come posso visualizzare lo stesso token in più modalità lessicali? Come esempio molto semplice, diciamo che la mia grammatica ha due modalità e voglio abbinare lo spazio bianco e la fine delle righe in entrambe le modalità, come posso farlo senza terminare con WS_MODE1 e WS_MODE2 per esempio. C'è un modo per riutilizzare la stessa definizione in entrambi i casi? Spero di ottenere token WS nel flusso di output per tutto lo spazio bianco indipendentemente dalla modalità. Lo stesso vale per EOL e altre parole chiave che possono apparire in entrambe le modalità.Come definire i token che possono apparire in più modalità lessicali in ANTLR4?
10
A
risposta
12
Le regole devono avere nomi diversi, ma è possibile utilizzare il comando lexer -> type(...)
per assegnare loro lo stesso tipo.
WS : [ \t]+;
mode Mode1;
Mode1_WS : WS -> type(WS);
mode Mode2;
Mode2_WS : WS -> type(WS);
Anche se Mode1_WS
e Mode2_WS
non sono fragment
regole, il generatore di codice vedrà il comando type
e sapere che è stato riassegnato i loro tipi, in modo da non definire i token per loro.
Problemi correlati
- 1. Dove possono apparire i BangPatterns
- 2. Usando "~ []" token con gli stati lessicali
- 3. antlr4: Ignora i token superflui durante la creazione di ParseTrees
- 4. Come definire un operatore ternario in Scala che conserva i token principali?
- 5. I commenti possono apparire prima della dichiarazione DOCTYPE?
- 6. variabili lessicali globali "falso" in Common Lisp
- 7. Chiusure lessicali su macrolet?
- 8. In che modo più app Django possono comunicare tra loro?
- 9. AnTLR4 strano comportamento in precedenza
- 10. definire più lingue in html
- 11. Come definire i baffi parziali in HTML?
- 12. Pip installare pacchetti -e non apparire in
- 13. Trattare caratteri non validi come un singolo token nel lexer ANTLR4
- 14. Quali token possono essere parametrizzati in istruzioni preparate con PDO?
- 15. AnTLR4: trattino e DEDENT gettoni
- 16. Definire i membri statici in C++
- 17. Come definire più tipi di linea per i grafici in R?
- 18. Come definire un'estensione su CollectionType in modo che i suoi metodi siano disponibili per i dizionari?
- 19. membri const Perché statici non possono apparire in un'espressione costante come 'interruttore'
- 20. Pyparsing newbie setParseAction che modifica i token
- 21. In che modo i dati principali possono archiviare un NSData?
- 22. non possono definire statico proprietà stringa astratto
- 23. In che modo i Temi campo Solr possono essere condivisi tra più core?
- 24. come usare il visitatore antlr4
- 25. Parser lento ANTLR4 generato in Python, ma veloce in Java
- 26. Dove sono le grammatiche dell'albero in ANTLR4?
- 27. Come aggiungere più TextView dynamicall per definire LinearLayout in main.xml
- 28. definire i valori ENUM in un plist in Xcode
- 29. Modalità Paesaggio Android che interrompe i miei pulsanti in cima
- 30. Posso definire i pacchetti opzionali in setuptools?
Breve domanda sull'utilizzo di queste regole di Lexer: nelle regole del parser si fa riferimento a WS o Mode1_WS, Mode2_WS? Ho provato entrambi, ma sembra che tu definisca solo le regole di Lexer senza farvi riferimento direttamente nelle regole del parser. In quel senes è piuttosto una "dichiarazione di importazione" che un "pseudonimo". –
Il comando 'type' assegna esplicitamente il tipo di token, che è il tipo che vedrà il parser. In questo caso, 'WS' verrebbe utilizzato per referenziare i token creati da una di queste 3 regole. –
@SamHarwell cosa termina la specifica della modalità finale? Ho notato che alcuni doc del lexer hanno frammenti di defs in seguito alla specifica della modalità finale in cui l'utilizzo del frammento mostra che i frammenti sono disponibili per tutte le modalità, inclusa quella predefinita. – bvj