2011-08-23 9 views

risposta

4

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.

17

Ecco un esempio whitespace sensitive language in xtext

+0

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. –

+0

Sembra essere ospitato su github ora https://github.com/ralfebert/org.eclipselabs.todotext –

+2

Purtroppo, non riesco a trovare questo campione da nessuna parte. – rds

2

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.

+0

Altri che hanno riscontrato lo stesso problema: [post su XText list March 2013] (http://www.eclipse.org/forums/index.php/mv/tree/457763/) –

3

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.

Problemi correlati