2012-12-14 17 views
7

Ho una grammatica ANTLR che definisce un DSL (linguaggio specifico del dominio). Questa grammatica è relativamente semplice. Sta analizzando il linguaggio ed emette il codice C per creare un traduttore molto semplice.Sintassi ANTLR Evidenzia DSL in Visual Studio

Questo linguaggio è pensato per essere utilizzato nell'applicazione C# (digitata in una sorta di controllo, sia esso RichTextBox o un controllo personalizzato) e un requisito è quello di evidenziare la sintassi per questa lingua. Ho perlustrato Internet nella speranza di trovare qualche tipo di informazione su come ottenerlo, o trovare uno strumento per renderlo un po 'più facile per me stesso.

Dopo non aver trovato troppe informazioni, la mia ipotesi migliore sarebbe che ho bisogno di usare il lexer generato da ANTLR per guardare i token e colorarli di conseguenza. È questo il percorso corretto di azione, o c'è qualche altro metodo/strumento per fornire l'evidenziazione della sintassi per le lingue specifiche del dominio personalizzato? Se questo è il metodo corretto, come posso riconoscere i token specifici?

Se ho omesso informazioni importanti, si prega di chiedere! Grazie!

risposta

3

Questo linguaggio è destinato a essere utilizzato in C# (digitato in una sorta di controllo, sia che si tratti RichTextBox o un controllo personalizzato) ed un requisito è quello di avere l'evidenziazione della sintassi per questa lingua.

Considerare l'utilizzo di Scintilla per il controllo. È un controllo di testo per la modifica del testo in stile IDE. Notepad++ lo utilizza per il controllo del testo, così come l'IDE SciTE da cui proviene. L'ho usato in un piccolo progetto IDE personalizzato scritto in C# utilizzando una versione non ufficiale di .NET specifica - penso che fosse ScintillaNET.

Scintilla supporta l'evidenziazione delle parole chiave personalizzata e anche una varietà di funzioni programmabili come la sottolineatura linea ondulata e cose del genere.


Se si dispone di un controllo che si vuole usare, penso che sia ragionevole usare un piccolo lexer ANTLR per la produzione di gettoni per voi. Ogni token contiene il numero di riga, la posizione del personaggio iniziale, il testo di origine e il tipo di token: tutto ciò che ti serve sapere cosa evidenziare e come. L'unica seccatura sarebbe eseguire il testo attraverso il lexer ogni volta che il testo viene modificato. Ci sono modi efficienti per farlo senza ri-lessare l'intero documento, ma è ancora qualcosa da tenere a mente.

4

Ho utilizzato con successo AvalonEdit per un progetto simile al mio. Ho appena creato un piccolo editor con l'evidenziazione della sintassi corretta.

È molto facile e veloce da installare e utilizzare nel progetto. Devi solo fornire un semplice file XML per documentare la sintassi del tuo DSL e avrai un output colorato pronto all'uso come controllo WPF.

Sembra che abbiano aggiunto servizi di completamento da quando l'ho usato, non ho esperienza in quella parte, però, ma sospetto che sia anche molto ben fatto se la qualità è la stessa della colorazione.

Problemi correlati