2 puntos por GN⁺ 2024-11-03 | 1 comentarios | Compartir por WhatsApp

La extraña sintaxis léxica

  • Este mes aprendí 42 lenguajes de programación para crear un nuevo resaltador de sintaxis para llamafile. Con motivo de Halloween, quiero compartir las sintaxis más sorprendentes.
  • Los lenguajes compatibles son 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 y Zig.

Cómo programar un resaltador de sintaxis

  • Implementar un resaltador de sintaxis no es difícil. C++ y GNU gperf son herramientas útiles.
  • gperf puede generar una tabla hash perfecta para maximizar el rendimiento.
  • Un resaltador de sintaxis básico puede implementarse como una máquina de estados finitos, enfocándose en cadenas, comentarios y palabras clave.

Demo

  • El nuevo resaltador de sintaxis de llamafile tiene una ventaja potente sobre ollama.
  • Se ofrece una demo que genera código en varios lenguajes de programación usando el modelo Meta LLaMA 3.2 3B Instruct en Windows 10.

Ejemplos sorprendentes de sintaxis léxica

  • C: Aunque el lenguaje C afirma ser simple, tiene elementos complejos como los trigraphs.
  • Haskell: Permite comentarios anidados.
  • Tcl: Puede incluir comillas dentro de los identificadores.
  • JavaScript: Tiene sintaxis de expresiones regulares y usa caracteres UNICODE como saltos de línea.
  • Shell: La sintaxis heredoc puede usarse de varias maneras.
  • String Interpolation: Kotlin, Scala y TypeScript permiten insertar código dentro de cadenas.
  • Swift: Las cadenas pueden rodearse con varios #.
  • C#: Las cadenas pueden delimitarse usando varias comillas.
  • FORTH: Tokeniza todo usando límites de espacio en blanco.
  • FORTRAN y COBOL: llamafile admite resaltado de sintaxis para estos lenguajes.
  • Zig: Las cadenas multilínea comienzan con dos barras invertidas.
  • Lua: Usa corchetes y signos igual para cadenas multilínea.
  • Assembly: Tiene varios dialectos, por lo que el resaltado de sintaxis es difícil.
  • Ada: Usa comillas simples para varios propósitos.
  • BASIC: No necesita comillas al final de una cadena.
  • Perl: Su sintaxis de expresiones regulares es única.
  • Ruby: Su sintaxis es compleja y difícil de entender.

Complejidad de los lenguajes compatibles

  • FORTH es el más simple y Ruby es el lenguaje más complejo.
  • La complejidad se evalúa según la cantidad de líneas de código necesarias para el resaltado de sintaxis de cada lenguaje.

Resumen de GN⁺

  • Este artículo explora la sintaxis única de varios lenguajes de programación y ofrece ideas necesarias para implementar un resaltador de sintaxis.
  • El resaltador de sintaxis de llamafile admite muchos lenguajes y puede ser especialmente útil para mantener lenguajes antiguos.
  • Ayuda a entender la complejidad sintáctica de los lenguajes de programación y será útil para quienes estén interesados en desarrollar resaltadores de sintaxis.
  • Proyectos con funciones similares incluyen Pygments y Emacs.

1 comentarios

 
GN⁺ 2024-11-03
Opinión de Hacker News
  • Varios lenguajes admiten la inserción de código dentro de cadenas
    • Incluye C#, Python, JavaScript, Ruby, Shell y Make
  • Explicación de las características únicas del lenguaje Tcl
    • Es difícil distinguir entre código y datos
    • Los comentarios pueden ser reconocidos como código
  • Explicación de la práctica función de cadenas con comillas de dólar en PostgreSQL
    • Permite expresar cadenas de varias maneras
  • Explicación de la función de resaltado de sintaxis de Vim
    • Implementa el resaltado de sintaxis declarando coincidencias y regiones
    • Admite resaltado de sintaxis complejo
  • Explicación del análisis léxico sensible al contexto en el lenguaje C
    • Requiere una tabla de símbolos
    • Para el resaltado de sintaxis, puede ser necesario el análisis sintáctico completo y la información de la tabla de símbolos
  • Explicación de un ejemplo curioso de los trigrafos de C
    • Explicación de la regla de cortocircuito usando el operador lógico ||
  • Explicación de una perspectiva sobre la sintaxis de Lisp
    • La sintaxis no es una parte importante del lenguaje y debería ser simple y uniforme
  • Opinión de que la sintaxis de Ruby es difícil de entender
  • Los escapes Unicode de Java pueden romper el resaltado de sintaxis
    • Los escapes Unicode también pueden usarse fuera de las cadenas
  • Interés en la implementación del resaltado de sintaxis de Joe
    • Puede resaltar correctamente los f-strings de Python
  • Explicación de por qué el resaltado de sintaxis de TeX es difícil
    • TeX puede redefinir la función de cada carácter
    • El resaltado de sintaxis completo es imposible