2 points par GN⁺ 2024-11-03 | 1 commentaires | Partager sur WhatsApp

Une syntaxe lexicale étrange

  • Ce mois-ci, 42 langages de programmation ont été appris afin de créer un nouveau surligneur syntaxique pour llamafile. À l’occasion d’Halloween, voici les syntaxes les plus surprenantes.
  • Les langages pris en charge sont 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 et Zig.

Comment coder un surligneur syntaxique

  • Implémenter un surligneur syntaxique n’est pas difficile. C++ et GNU gperf sont des outils utiles.
  • gperf permet de générer une table de hachage parfaite afin de maximiser les performances.
  • Un surligneur syntaxique basique peut être implémenté sous forme de machine à états finis, en se concentrant sur les chaînes, les commentaires et les mots-clés.

Démo

  • Le nouveau surligneur syntaxique de llamafile présente un avantage net par rapport à ollama.
  • Une démo montre la génération de code dans divers langages de programmation avec le modèle Meta LLaMA 3.2 3B Instruct sous Windows 10.

Exemples de syntaxe lexicale surprenante

  • C : le langage C se dit simple, mais il comporte des éléments complexes comme les trigraphes.
  • Haskell : autorise les commentaires imbriqués.
  • Tcl : peut inclure des guillemets dans les identifiants.
  • JavaScript : possède une syntaxe d’expressions régulières et utilise des caractères UNICODE comme sauts de ligne.
  • Shell : la syntaxe heredoc peut être utilisée de différentes manières.
  • Interpolation de chaînes : Kotlin, Scala et TypeScript autorisent l’insertion de code dans les chaînes.
  • Swift : les chaînes peuvent être entourées de plusieurs #.
  • C# : les chaînes peuvent être délimitées par plusieurs guillemets.
  • FORTH : tout est tokenisé à partir des espaces.
  • FORTRAN et COBOL : llamafile prend en charge la coloration syntaxique de ces langages.
  • Zig : les chaînes multilignes commencent par deux antislashs.
  • Lua : utilise des crochets et des signes égal pour les chaînes multilignes.
  • Assembly : ses nombreux dialectes rendent la coloration syntaxique difficile.
  • Ada : utilise l’apostrophe à des fins variées.
  • BASIC : les chaînes n’ont pas besoin de guillemet fermant.
  • Perl : sa syntaxe d’expressions régulières est particulière.
  • Ruby : sa syntaxe est complexe et difficile à comprendre.

Complexité des langages pris en charge

  • FORTH est le plus simple, et Ruby le plus complexe.
  • La complexité est évaluée d’après le nombre de lignes de code nécessaires pour la coloration syntaxique de chaque langage.

Résumé GN⁺

  • Cet article explore les syntaxes uniques de divers langages de programmation et fournit des éclairages utiles pour implémenter un surligneur syntaxique.
  • Le surligneur syntaxique de llamafile prend en charge de nombreux langages et peut être particulièrement utile pour la maintenance de langages anciens.
  • Il aide à comprendre la complexité syntaxique des langages de programmation et sera utile à ceux qui s’intéressent au développement de surligneurs syntaxiques.
  • Parmi les projets offrant des fonctionnalités similaires, on peut citer Pygments et Emacs.

1 commentaires

 
GN⁺ 2024-11-03
Avis Hacker News
  • Plusieurs langages prennent en charge l’insertion de code dans les chaînes de caractères
    • Cela inclut C#, Python, JavaScript, Ruby, Shell et Make
  • Explication des caractéristiques particulières du langage Tcl
    • Il est difficile d’y distinguer le code des données
    • Un commentaire peut être interprété comme du code
  • Présentation de la fonction pratique des chaînes entre guillemets dollar de PostgreSQL
    • Elle permet d’exprimer des chaînes de différentes manières
  • Explication du fonctionnement de la coloration syntaxique dans Vim
    • Elle est implémentée en déclarant des correspondances et des régions
    • Elle prend en charge une coloration syntaxique complexe
  • Explication du lexing sensible au contexte en C
    • Une table des symboles est nécessaire
    • Une analyse syntaxique complète et les informations de la table des symboles peuvent être nécessaires pour la coloration syntaxique
  • Présentation d’un exemple amusant des trigrammes en C
    • Explication des règles d’évaluation courte avec l’opérateur logique ||
  • Présentation d’un point de vue sur la syntaxe de Lisp
    • La syntaxe n’est pas une partie importante du langage et devrait être simple et uniforme
  • Avis selon lequel la syntaxe de Ruby est difficile à comprendre
  • Les échappements Unicode de Java peuvent casser la coloration syntaxique
    • Les échappements Unicode peuvent aussi être utilisés en dehors des chaînes
  • Intérêt pour l’implémentation de la coloration syntaxique dans Joe
    • Possibilité de bien mettre en évidence les f-strings Python
  • Explication de la raison pour laquelle la coloration syntaxique de TeX est difficile
    • TeX peut redéfinir la fonction de chaque caractère
    • Une coloration syntaxique complète est impossible