Domanda

Sto masochisticamente scrivendo un editor di testo open source per Mac e ho finalmente raggiunto il punto in cui voglio aggiungere l'evidenziazione della sintassi. Vado avanti e indietro su diverse soluzioni per il passato pochi giorni, e ho finalmente deciso di aprire la questione ad un pubblico più vasto.

Ecco le opzioni che vedo:

  • Definire linguaggi fondamentalmente con una serie di pattern matching regex (simile a come TextMate definisce le lingue)
  • Definisci lingue con un grammatica formale come BNF o PEG

Utilizzando il pattern matching regex sembra meno ideale in quanto non può rappresentare formalmente un linguaggio quasi come una grammatica formale; tuttavia, alcune lingue meno formali avranno un momento difficile montaggio in BNF (cioè Markdown - anche se so che c'è una grande PEG implementazione ).

Quali sono i compromessi di prestazioni per l'evidenziazione della sintassi dal vivo? Che dire di flessibilità per una vasta gamma di lingue?

Se vado via BNF, Todd Ditchendorf creato il Parsekit quadro impressionante che avrebbe funzionato bene out-of-the -scatola. Qualcuno sa di qualsiasi qualcosa di simile per il PEG di?

È stato utile?

Soluzione

A meno che non si vuole combattere la battaglia di ottenere un pieno contesto di libero (o peggio, un full sensibile al contesto) la grammatica del tutto corretta per ogni lingua che si desidera elaborare (o peggio, per ogni dialetto della lingua che si desidera processo ... quanti tipi di C ++ ci sono?), ai fini del l'evidenziazione della sintassi probabilmente stai meglio rinunciare alla completa correttezza e accettare il fatto che a volte si' ll sbagliare. In questo caso, espressioni regolari sembrano estremamente buona risposta. Possono anche essere molto veloce, in modo da non interferire con la persona che fa la modifica.

Se ti ostini a fare il controllo sintassi completa / conclusione (non credo che siete), allora avrete bisogno che la grammatica completa. Potrai anche essere un tempo molto lungo nella produzione di editor per i linguaggi reali.

A volte è meglio non essere troppo serio. Una soluzione al 98% che si può ottenere è meglio di una soluzione al 100% che non si materializza.

Altri suggerimenti

Non potrebbe essere esattamente quello che ti serve dal momento che si sta scrivendo l'editor da soli, ma c'è un quadro impressionante chiamato xtext che effettivamente generare un editor completo di colorazione della sintassi, vista struttura personalizzabile e il completamento automatico, ecc, basata su una grammatica per la lingua: http://eclipse.org/Xtext

In aggiunta ai problemi di ottenere una grammatica al lavoro per una lingua, v'è la complessità di cercare di farlo funzionare per il codice che si trova nel mezzo della fase di modifica.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top