Frage

Ich schreibe masochistisch eine Open-Source-Texteditor für Mac und haben endlich den Punkt erreicht, an dem ich möchte Syntax-Hervorhebung hinzugefügt. Ich habe in die letzten paar Tage hin und her zu verschiedenen Lösungen gehen, und ich habe endlich ein breiteres Publikum zu öffnen, die Frage entschieden.

Hier sind die Optionen, die ich sehe:

  • definiert Sprachen grundsätzlich mit einer Reihe von RegexMuster Anpassung (ähnlich wie Textmate definiert seine Sprachen)
  • definiert Sprachen mit einer formalen Grammatik wie BNF oder PEG

Mit Matching RegexMuster scheint weniger als ideal, da es nicht förmlich die Sprache fast sowie eine formale Grammatik darstellen kann; jedoch einige weniger formale Sprachen wird eine harte Zeit den Einbau in BNF (dh Abschriften haben - obwohl ich weiß, gibt es eine große PEG Implementierung ).

Was sind die Performance-Abwägungen für Live-Syntax-Hervorhebung? Was ist Flexibilität für eine Vielzahl von Sprachen?

Wenn ich die BNF Weg gehen, erstellt Todd Ditchendorf die ehrfürchtige ParseKit Rahmen, die schön sind out-of-the funktionieren würde -Box. Wer weiß jeder etwas ähnliches für PEGs?

War es hilfreich?

Lösung

Es sei denn, Sie wollen den Kampf kämpfen einen Vollkontextfrei bekommen (oder noch schlimmer, eine vollständige kontextsensitive) Grammatik völlig richtig für jede Sprache, die Sie bearbeiten möchten (oder schlimmer noch, für alle Dialekt der Sprache, die Sie bearbeiten wollen ... wie viele Arten von C ++ gibt es?), für die Zwecke der Syntaxhervorhebung sind Sie wahrscheinlich auf vollständige Richtigkeit aufgeben besser und akzeptieren, dass man manchmal‘ ll es falsch. In diesem Fall scheinen regexps wie eine extrem gute Antwort. Sie können auch sehr schnell sein, damit sie nicht mit der Person, die die Bearbeitung stören.

Wenn Sie darauf bestehen, tun vollständige Syntaxprüfung / Abschluss (Ich glaube nicht, Sie sind), dann werden Sie, dass die vollständige Grammatik benötigen. Sie finden auch eine sehr lange Zeit in der Herstellung von Editoren für echte Sprachen sein.

Manchmal ist es besser, nicht zu ernst zu sein. Eine 98% ige Lösung, dass Sie besser als eine 100% ige Lösung erhalten können, dass nie materialisiert.

Andere Tipps

Es ist vielleicht nicht genau, was Sie brauchen, da Sie den Editor selbst schreiben, aber es ist ein fantastischer Rahmen Xtext genannt, die einen kompletten Editor mit Syntax-Einfärbung, tatsächlich generieren anpassbare Gliederungsansicht und automatischer Vervollständigung usw., basierend auf eine Grammatik für die Sprache aus: http://eclipse.org/Xtext

Zusätzlich zu den Problemen der eine Grammatik zur Arbeit für eine Sprache bekommen, gibt es die zusätzliche Komplexität zu versuchen, es an der Arbeit für den Code zu bekommen, das in der Mitte bearbeitet zu werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top