Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

95
Vistas
¿Cómo implementar el soporte de matriz con el analizador Chevrotain?

Estoy construyendo una calculadora con el analizador Chevrotain y he jugado con su ejemplo de calculadora

Parque infantil Chevrotain : https://chevrotain.io/playground/

Gramática del analizador : semántica incrustada de la calculadora

Muestra de entrada : precedencia de paréntesis

El ejemplo anterior usa enteros como entrada/salida. Me gustaría admitir enteros Y matrices.

Ejemplo básico :

2 * ( 3 + 7 )

Ejemplo con arreglos :

2 * ( {{array1}} + {{array2}} )

 const map = { array1: [1, 2, 3, 4, 5], array2: [10, 20, 30, 40, 50] }

Sé cómo lex y analizar {{array}} pero no sé cómo visitarlos o recorrer los arreglos para lograr el siguiente resultado

 2 * ( 1 + 10 ) = 22 2 * ( 2 + 20 ) = 44 2 * ( 3 + 30 ) = 66 2 * ( 4 + 40 ) = 88 2 * ( 5 + 50 ) = 110

Resultado final del análisis de 2 * ( {{array1}} + {{array2}} )

debería ser [22, 44, 66, 88, 110]

Una vez que se ha creado el AST (incluidas las matrices en algún nodo hoja), ¿cómo puedo reducirlo al resultado final, que es una matriz?

Un enfoque es tener algún tipo de estado (con el índice actual) y ejecutar el visitante tantas veces como array.length. Pero no me queda claro cómo se puede implementar con Chevretain

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Esta solución funcionará

 const map = { array1: [1, 2, 3, 4, 5], array2: [10, 20, 30, 40, 50] } const { array1, array2 } = map; const res = []; for (let i = 0; i < (array1.length > array2.length ? array1.length : array2.length); i++) { if (array1[i] && array2[i]) { res.push((array1[i] + array2[i]) * 2); } else if (array1[i] && !array2[i]) { res.push(array1[i] * 2); } else { res.push(array1[i] * 2); } } // res = [ 22, 44, 66, 88, 110 ]

Primero, extraeremos las matrices de un objeto, luego crearemos un bucle que se ejecutará varias veces de la matriz más larga (operador trinario). Dentro del bucle, insertaremos el elemento de la matriz1 más el elemento de la matriz2 duplicado por 2 en la nueva matriz, y si no hay ningún elemento en uno de los puntos de las matrices (lo que significa que una de las matrices es más corta que la otra ) insertaremos solo un elemento.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda