Especificación del análisis sintáctico
Especificación del análisis sintáctico
Section titled “Especificación del análisis sintáctico”Este compilador utiliza la herramienta Nearley.js para definir la gramática del lenguaje LibreScript. A continuación, se explica cada una de las partes importantes de estas reglas:
_ -> %ws:* // Cero o más espacios__ -> %ws:+ // Uno o más espacios obligatorios_nl -> (%ws | %nl | %comentario_linea | %comentario_bloque):*
Reglas auxiliares
Section titled “Reglas auxiliares”Estas reglas permiten que el analizador ignore espacios y saltos de línea de forma flexible. _nl permite múltiples líneas en blanco y comentarios.
Programa y Sentencias
Section titled “Programa y Sentencias”Programa -> _nl Sentencias _nlSentencias -> Sentencia _nl | Sentencias Sentencia _nl | %empty
Un programa es una lista de sentencias separadas por líneas o espacios. Si no hay ninguna sentencia, se considera un programa vacío.
Declaraciones
Section titled “Declaraciones”DeclaracionVariable -> %IDENTIFICADOR_VAR _ : _ Tipo _ = _ Expresion _ ;DeclaracionConstante -> %IDENTIFICADOR_CONST _ : _ Tipo _ = _ Expresion _ ;
Permiten definir variables mutables ($x
) y constantes ($$PI
) con tipo y valor inicial.
Tipo -> TipoBase | TipoBase [] | TipoBase [][]TipoBase -> numero | texto | booleano | objeto | Identificador personalizado
Soporta tipos primitivos, arreglos y matrices.
Asignaciones
Section titled “Asignaciones”Asignacion -> Designable = Expresion ;Designable -> variable, constante, acceso a arreglo o propiedad
Permite asignar valores a elementos designables.
Estructuras de control
Section titled “Estructuras de control”CondicionalSi -> si (condición) {bloque} [sino_si]* [sino]BucleMientras -> mientras (condición) {bloque}BuclePara -> para (inicio; condición; incremento) {bloque}EstructuraSegun -> segun (expresión) {casos...}
Permite control de flujo como condicionales y bucles anidados.
Funciones
Section titled “Funciones”DeclaracionFuncion -> funcion nombre(parámetros): tipo {bloque}
La gramática permite declarar funciones con tipo de retorno y con visibilidad pública o privada.
Expresiones
Section titled “Expresiones”Expresiones están divididas por niveles de precedencia:Lógica: &&, ||Igualdad: ==, !=Relacional: >, <, >=, <=Aritmética: +, -, *, /, %, **Unarias: -x, !xPostfijas: x++, x--
Literales y llamadas
Section titled “Literales y llamadas”LiteralPrimario -> números, textos, booleanos, variables, objetosLlamadaFuncion -> nombre o propiedad seguido de paréntesis con argumentos
Estas reglas permiten formar expresiones completas y ejecutar funciones.
Creación de estructuras
Section titled “Creación de estructuras”CreacionArreglo -> [elem1, elem2, ...]CreacionObjetoLiteral -> {clave: valor, ...}
El lenguaje soporta estructuras modernas como arreglos literales y objetos con pares clave-valor. Con esta gramática definida en Nearley, el compilador puede transformar código fuente en una representación estructurada (AST).