Día 3 Gramática para el Analizador

Explora el Parser: de tokens a árbol de expresiones con CFG, AST y Visitor. Ejemplos prácticos y soluciones a medida en Q2BSTUDIO.

14 sept 2025 • 5 min de lectura • Equipo Q2BSTUDIO

Inteligencia-Artificial-

Ha pasado un tiempo. El clima en Hyderabad ha estado errático últimamente y, por un brevísimo periodo, mi constancia con este proyecto también lo estuvo. Pero ya estoy de vuelta. En esta entrega explico la segunda etapa del intérprete, el Analizador sintáctico o Parser, que toma los tokens que genera el Scanner y construye un árbol sintáctico a partir de ellos.

El árbol se genera según reglas concretas llamadas gramática libre de contexto o CFG. A diferencia de un lenguaje regular, que agrupa partes similares del texto en tokens pero no puede modelar expresiones profundamente anidadas, la CFG permite derivaciones potencialmente infinitas porque las reglas pueden referirse a sí mismas. Antes de implementar el Parser hay que definir esas reglas que servirán de base para construir los árboles.

Conceptos clave: terminales y no terminales. Los terminales son elementos finales como literales o palabras reservadas, mientras que los no terminales son referencias a otras reglas. El Scanner emite tokens que el Parser consume y agrupa según las reglas de la gramática para producir nodos del árbol. En general las literales y números son hojas, y los operadores son nodos internos. Las reglas pueden ser recursivas, lo que permite construir expresiones arbitrariamente complejas.

Para ilustrar cómo funcionan las derivaciones propongo un ejemplo sencillo inspirado en un conjunto de reglas de muestra. Supongamos una regla chilling que se expande a do activity. Si elegimos para do la alternativa watch y para activity la alternativa music y para music el terminal piano, la derivación completa nos da chilling que corresponde a watch piano, mostrando cómo una cadena de reglas produce una instrucción final.

En el desarrollo real de Lox (o cualquier lenguaje similar) creamos una clase base llamada Expr que referencia varias subclases que a su vez pueden volver a referenciar Expr. Esa recursión es esencial porque una expresión suele contener otras expresiones hasta llegar a operadores y operandos. Dado que Expr y sus subclases comparten una plantilla similar, usamos metaprogramación para generar código repetitivo: una función defineAst recibe una lista de descripciones de subtipos y crea las clases correspondientes en bucle, evitando escribir a mano cada clase.

Surge entonces el problema de las expresiones: cómo asociar comportamientos comunes a muchas subclases sin romper la extensibilidad. Si añadimos métodos como imprimir o evaluar directamente en cada subclase, añadir un nuevo comportamiento requerirá modificar todas las subclases, y añadir un nuevo tipo requerirá actualizar todas las implementaciones comunes. Esa es la clásica Expression Problem.

Para mantener separación de responsabilidades preferimos que las clases Expr sean meras estructuras de datos sin comportamientos complejos, de modo que cada fase del intérprete pueda procesarlas sin mezclar responsabilidades. La solución habitual en lenguajes orientados a objetos es el patrón Visitor. Con este patrón definimos una interfaz Visitor con métodos visitTipo para cada subclase, y cada subclase implementa un método accept que invoca el método visit correspondiente pasando su propia instancia. Para añadir un nuevo comportamiento solo se crea una nueva clase visitante que implementa la interfaz, sin tocar las clases de la jerarquía de datos.

Un ejemplo conceptual: queremos imprimir una expresión. Creamos un visitante Print que implementa los métodos visit para Binary, Unary, Literal y Grouping. El método print recibe una Expr y llama a expr.accept(this). La llamada se dirige a la implementación accept de la subclase concreta, que invoca visitBinary por ejemplo, y el visitante puede entonces recorrer los campos de la subclase para producir la representación textual. Esta aproximación permite añadir tantas operaciones como queramos sin modificar la estructura de las expresiones.

Para entenderlo de forma muy cruda, imagina un censo. La oficina del censo envía una notificación a cada casa pidiendo permiso para entrar. La casa acepta la visita mediante un método accept, y cuando el censista entra realiza la acción concreta, ya sea contar personas o emitir tarjetas. El visitante es el agente que implementa un comportamiento concreto sobre la estructura que acepta la visita.

Lo siguiente en el proyecto es implementar el Parser de verdad, es decir el componente que, usando la CFG definida, consuma tokens y produzca el árbol de expresiones que pasarán a las fases siguientes como el resolver de variables, el evaluador o el compilador intermedio.

En Q2BSTUDIO desarrollamos soluciones a medida para abordar exactamente este tipo de necesidades en proyectos de software complejo. Somos especialistas en desarrollo de aplicaciones a medida y software a medida y combinamos buenas prácticas de ingeniería con capacidades en inteligencia artificial y ciberseguridad para entregar productos robustos. Si buscas desarrollar una aplicación adaptada a tus procesos puedes consultar nuestra oferta de aplicaciones a medida en desarrollo de aplicaciones multiplataforma. También integramos modelos de inteligencia artificial para empresas y agentes IA que potencian productos y procesos, más información disponible en servicios de inteligencia artificial.

Nuestros servicios incluyen ciberseguridad y pentesting, servicios cloud aws y azure, inteligencia de negocio y Power BI, automatización de procesos y consultoría en IA para empresas, todo orientado a crear soluciones escalables y seguras. Palabras clave relevantes para este artículo: aplicaciones a medida, software a medida, inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, ia para empresas, agentes IA, power bi.

Para terminar, un apunte personal: hoy pasé un buen rato en el balcón observando la ciudad. Me encantan los balcones porque ofrecen una ventana a historias pequeñas y a la vez muestran la grandiosidad de lo cotidiano. Esa mezcla de estructura y sorpresa es, en cierto modo, la misma sensación que tengo al diseñar gramáticas y parsers: un orden que permite infinitas variaciones.

¿UNA PAUSA?

Juega un momento antes de irte

NUESTROS SERVICIOS

Cómo podemos ayudarte

Inteligencia artificial

Agentes de IA, chatbots y asistentes inteligentes que automatizan tareas y atienden a tus clientes 24/7 para mejorar la eficiencia de tu negocio.

Más info

Desarrollo de software

Aplicaciones web, móviles y de escritorio, intranets, e-commerce, SaaS y plataformas de gestión diseñadas para las necesidades concretas de tu empresa.

Más info

Servicios cloud

Migración, infraestructura, hosting gestionado, alta disponibilidad y seguridad en Microsoft Azure y Amazon Web Services para que tu negocio escale sin límites.

Más info

Ciberseguridad y pentesting

Auditorías de seguridad, test de intrusión (pentesting) y protección de aplicaciones, datos e infraestructura on-premise y cloud, con hacking ético y cumplimiento normativo.

Más info

Business Intelligence

Cuadros de mando y análisis de datos con Power BI: integramos tus fuentes, diseñamos dashboards y KPIs y convertimos tus datos en decisiones.

Más info

Automatización de procesos

Automatizamos tareas repetitivas y conectamos tus aplicaciones con n8n, Power Automate, Make y RPA, eliminando trabajo manual y aumentando la productividad.

Más info

Formación para empresas

Formamos a tus equipos en tecnología con criterio: desarrollo web, bases de datos, Git, buenas prácticas y seguridad, automatización con n8n, inteligencia artificial para empresas y creación de soluciones de IA con Azure AI Foundry.

Más info

Auditoría de código

Auditamos el código que creas tú, tu equipo o una IA: te decimos qué está bien y qué mejorar, lo securizamos y lo dejamos listo para producción, web o app.

Más info

Generación de imágenes con IA

Creamos por ti las imágenes que necesita tu negocio con inteligencia artificial: producto, redes, publicidad, ilustración y avatares. Tú nos dices qué quieres y te lo entregamos listo para usar.

Más info

Generación de vídeos con IA

Creamos por ti vídeos con inteligencia artificial: promocionales, para redes, presentadores virtuales, doblaje y animaciones. Nos cuentas la idea y te lo entregamos montado y listo para publicar.

Más info

Avatares conversacionales con IA

Creamos avatares conversacionales con IA —humanos digitales con cara y voz— que atienden a tus clientes y equipos con el conocimiento de tu empresa, en tu web, monitores interactivos, WhatsApp o Teams.

Más info

Marketing Online e IA

Google Ads, Meta Ads, LinkedIn Ads y posicionamiento en motores de IA (GEO/AEO): captamos clientes y hacemos que tu marca aparezca donde te buscan, también en ChatGPT, Gemini y Perplexity.

Más info

¿Tienes un proyecto en mente?

Cuéntanos tu visión y la convertimos en una solución de software. Sea cual sea el alcance, hacemos realidad tu idea.

Live Chat