Come posso usare Xtext per analizzare le lingue con spazi semantici? Sto cercando di scrivere una grammatica per CoffeeScript e non riesco a trovare alcuna buona documentazione su questo.Xtext: grammatica per linguaggio con spazi significativi/semantici
risposta
AFAIK, non è possibile.
In caso di parsing di lingue simili a Python, è necessario che il lexer emetta i token INDENT
e DEDENT
. Affinché ciò accada, è necessario che i predicati semantici siano supportati all'interno delle regole di lexer (regole di Xtext terminal
) che prima controllano se la posizione corrente nella riga del prossimo carattere int l'input è uguale a 0 (l'inizio della riga) e è un ' '
o '\t'
.
Ma sfogliando il documentation, non vedo che questo sia supportato da Xtext al momento. Poiché Xtext 2.0, il supporto è stato aggiunto per i predicati semantici nelle regole di produzione (vedere: 6.2.8 Predicati sintattici), ma non nelle regole del terminale.
L'unico modo per farlo con Xtext sarebbe quello di lasciare che il lexer produca spazi terminali e interruzioni di linea, ma questo farebbe un casino totale delle regole di produzione.
Se si vuole analizzare un tale linguaggio utilizzando Java (e un generatore di parser Java oriented) io consiglierei di ANTLR, in cui è possibile emettere tali INDENT
e DEDENT
gettoni abbastanza facilmente. Ma se ti piace l'integrazione con Eclipse, allora non vedo come potresti farlo usando Xtext, mi spiace.
Ecco un esempio whitespace sensitive language in xtext
Per le persone interessate in CoffeeScript, Adam Schmideg ha un Eclipse plugin that uses XText.
Per le persone interessate all'analisi di DSL simili a Python in XText, il codice Ralf Ebert per Todotext menzionato sopra non è più disponibile da Github ma è possibile trovarlo nello Eclipse test repository. Vedere lo original thread su questo lavoro e lo Eclipse issue che è stato sollevato su di esso.
Ho giocato con questo codice oggi e la mia conclusione è che non funziona più nella versione corrente di XText. Quando XText è usato in Eclipse, penso che faccia "parsing parziale". Questo non è compatibile con il lexer di stato che è necessario elaborare i linguaggi sensoriali di indentazione. Quindi sospetto che anche se si aggiusta il lexer, l'editor di Eclipse non funziona. Nel problema, sembra che Ralf abbia proposto delle patch per risolvere questi problemi, ma guardando alla fonte XText, questi cambiamenti sembrano già lontani? Se sbaglio e qualcuno riesce a farlo funzionare, sarei molto interessato?
Esiste un'implementazione diversa here ma non riesco a ottenere che funzioni anche con la versione corrente di XText.
Invece sono passato a parboiled che supporta indentation based grammars fuori dalla scatola.
Altri che hanno riscontrato lo stesso problema: [post su XText list March 2013] (http://www.eclipse.org/forums/index.php/mv/tree/457763/) –
La versione 2.8 di Xtext viene fornita con il supporto per Whitespace-Aware Languages. Questa versione viene fornita con "Esempio di automazione domestica" che è possibile utilizzare come modello.
- 1. Xtext - linguaggio di più file
- 2. Come testare l'unità per Xtext
- 3. Esempio xtext di un oggetto con scope
- 4. XText in un prodotto RCP
- 5. È possibile utilizzare Xtext senza eclissi?
- 6. Grammatica e sintassi di typedef in linguaggio C
- 7. Scrivere un lexer Xtext/ANTLR personalizzato senza un file di grammatica
- 8. Grammatica grammatica dispari
- 9. Ignora spazi bianchi con PEG.js
- 10. Dove posso trovare una grammatica formale per il linguaggio di programmazione Perl?
- 11. Dove posso trovare il file di grammatica ufficiale per il linguaggio di programmazione Java 7?
- 12. Dove posso trovare la grammatica standard BNF o YACC per il linguaggio C++?
- 13. Qual è la differenza tra grammatica lessicale e grammatica sintattica?
- 14. Disabilita la finestra di dialogo "Aggiungi natura Xtext" in Eclipse
- 15. parsec: c'è un modo semplice per consentire commenti/spazi bianchi ovunque nella grammatica?
- 16. Grammatica context-free per C
- 17. ElasticSearch per termini con spazi
- 18. Analizzatore Python per linguaggio simile a Python
- 19. Grammatica ambigua
- 20. Visualizzazione dell'albero di analisi/modello di nodo/AST in xtext
- 21. Problemi con grammatica di limone (precedenza?)
- 22. Dove posso trovare una grammatica formale per Matlab?
- 23. Genera la grammatica della lingua di TextMate dalla grammatica PEG.js
- 24. Sostituisci tutti gli spazi e simboli speciali con dash in URL utilizzando il linguaggio PHP
- 25. Grammatica PEG non-ricorsiva per un'espressione "
- 26. XText analizza in modo programmatico uno script DSL in un modello Ecore
- 27. IDE per linguaggio OCaml
- 28. Cosa si usa per "questo" in linguaggio C#?
- 29. Conversione di una grammatica in LL (1) grammatica: alcuni problemi
- 30. Espressione regolare per sostituire spazi con trattini
Cool (Dovrò approfondire un po 'XText, una risposta a non rispondere a questa tag ancora ... :))! Non riesco a rimuovere la mia risposta perché è la risposta [email protected] deve accettare il tuo prima che io possa rimuovere il mio. –
Sembra essere ospitato su github ora https://github.com/ralfebert/org.eclipselabs.todotext –
Purtroppo, non riesco a trovare questo campione da nessuna parte. – rds