2 Punkte von GN⁺ 2024-11-03 | 1 Kommentare | Auf WhatsApp teilen

Seltsame lexikalische Syntax

  • Diesen Monat habe ich 42 Programmiersprachen gelernt, um einen neuen Syntax-Highlighter für llamafile zu bauen. Zu Halloween möchte ich die überraschendsten Syntaxformen teilen.
  • Unterstützt werden Ada, Assembly, BASIC, C, C#, C++, COBOL, CSS, D, FORTH, FORTRAN, Go, Haskell, HTML, Java, JavaScript, Julia, JSON, Kotlin, ld, LISP, Lua, m4, Make, Markdown, MATLAB, Pascal, Perl, PHP, Python, R, Ruby, Rust, Scala, Shell, SQL, Swift, Tcl, TeX, TXT, TypeScript und Zig.

Wie man einen Syntax-Highlighter implementiert

  • Die Implementierung eines Syntax-Highlighters ist nicht schwer. C++ und GNU gperf sind dabei nützliche Werkzeuge.
  • gperf kann perfekte Hash-Tabellen erzeugen, um die Performance zu maximieren.
  • Ein grundlegender Syntax-Highlighter lässt sich als endlicher Zustandsautomat implementieren und konzentriert sich auf Strings, Kommentare und Schlüsselwörter.

Demo

  • Der neue Syntax-Highlighter von llamafile hat einen starken Vorteil gegenüber ollama.
  • Es gibt eine Demo, die auf Windows 10 mit dem Modell Meta LLaMA 3.2 3B Instruct Code in verschiedenen Programmiersprachen erzeugt.

Beispiele für überraschende lexikalische Syntax

  • C: Die Sprache C behauptet, einfach zu sein, hat aber komplexe Elemente wie Trigraphen.
  • Haskell: Erlaubt verschachtelte Kommentare.
  • Tcl: Kann Anführungszeichen in Bezeichnern enthalten.
  • JavaScript: Hat eine Syntax für reguläre Ausdrücke und verwendet UNICODE-Zeichen als Zeilenumbruchzeichen.
  • Shell: Kann die Heredoc-Syntax auf verschiedene Arten verwenden.
  • String Interpolation: Kotlin, Scala und TypeScript erlauben das Einfügen von Code in Strings.
  • Swift: Kann Strings mit mehreren # umschließen.
  • C#: Kann Strings mit mehreren Anführungszeichen umschließen.
  • FORTH: Tokenisiert alles anhand von Leerraumgrenzen.
  • FORTRAN und COBOL: llamafile unterstützt Syntax-Highlighting für diese Sprachen.
  • Zig: Beginnt mehrzeilige Strings mit zwei Backslashes.
  • Lua: Verwendet eckige Klammern und Gleichheitszeichen für mehrzeilige Strings.
  • Assembly: Hat viele verschiedene Dialekte, was Syntax-Highlighting schwierig macht.
  • Ada: Verwendet einfache Anführungszeichen für verschiedene Zwecke.
  • BASIC: Benötigt am Ende eines Strings kein Anführungszeichen.
  • Perl: Hat eine einzigartige Syntax für reguläre Ausdrücke.
  • Ruby: Die Syntax ist komplex und schwer zu verstehen.

Komplexität der unterstützten Sprachen

  • FORTH ist die einfachste und Ruby die komplexeste Sprache.
  • Die Komplexität wird anhand der Anzahl der Codezeilen für das Syntax-Highlighting jeder Sprache bewertet.

Zusammenfassung von GN⁺

  • Dieser Artikel untersucht die einzigartige Syntax verschiedener Programmiersprachen und liefert Einblicke, die für die Implementierung eines Syntax-Highlighters nötig sind.
  • Der Syntax-Highlighter von llamafile unterstützt viele verschiedene Sprachen und kann besonders für die Wartung älterer Sprachen nützlich sein.
  • Er hilft dabei, die syntaktische Komplexität von Programmiersprachen zu verstehen, und ist für Menschen nützlich, die sich für die Entwicklung von Syntax-Highlightern interessieren.
  • Projekte mit ähnlichen Funktionen sind Pygments und Emacs.

1 Kommentare

 
GN⁺ 2024-11-03
Hacker-News-Kommentar
  • Viele Sprachen unterstützen das Einbetten von Code in Strings
    • Dazu gehören C#, Python, JavaScript, Ruby, Shell und Make
  • Beschreibung der besonderen Eigenschaften der Sprache Tcl
    • Es ist schwer, Code und Daten voneinander zu unterscheiden
    • Kommentare können als Code interpretiert werden
  • Erklärung der praktischen Dollar-Quoting-Strings in PostgreSQL
    • Strings können auf verschiedene Arten dargestellt werden
  • Erklärung der Syntaxhervorhebung in Vim
    • Die Syntaxhervorhebung wird durch das Deklarieren von Matches und Bereichen umgesetzt
    • Sie unterstützt komplexe Syntaxhervorhebung
  • Erklärung des kontextsensitiven Lexings in C
    • Eine Symboltabelle ist erforderlich
    • Für Syntaxhervorhebung können vollständiges Parsing und Informationen aus der Symboltabelle nötig sein
  • Erklärung eines unterhaltsamen Beispiels für C-Trigraphen
    • Erklärung der Kurzschlussregel mit dem logischen Operator ||
  • Beschreibung der Sichtweise auf Syntax in Lisp
    • Syntax ist kein wichtiger Teil der Sprache und sollte einfach und einheitlich sein
  • Die Meinung, dass die Syntax von Ruby schwer zu verstehen ist
  • Unicode-Escapes in Java können Syntaxhervorhebung kaputtmachen
    • Unicode-Escapes können auch außerhalb von Strings verwendet werden
  • Interesse an der Implementierung der Syntaxhervorhebung in Joe
    • Eine angemessene Hervorhebung von Python-f-Strings ist möglich
  • Erklärung, warum Syntaxhervorhebung in TeX schwierig ist
    • TeX kann die Funktion jedes Zeichens neu definieren
    • Vollständige Syntaxhervorhebung ist unmöglich