Curso de Raku / Expresiones regulares y gramáticas / Gramáticas / Clases de acción

Acciones en línea frente a clases de acción

Ya tienes dos formas de adjuntar significado a un análisis. ¿Cuál usar?

Las acciones en línea ponen un bloque { make … } justo dentro del token:

grammar Sum {
    token TOP { <a> '+' <b> { make $<a>.Int + $<b>.Int } }
    token a   { \d+ }
    token b   { \d+ }
}

Son rápidas de escribir y valen para una gramática minúscula o un guion de usar y tirar. El precio es que el patrón y la lógica quedan enredados.

Una clase de acciones mantiene separadas ambas cosas: la gramática describe la forma y la clase de acciones describe el significado:

grammar Sum {
    token TOP { <a> '+' <b> }
    token a   { \d+ }
    token b   { \d+ }
}

class SumActions {
    method TOP($/) { make $<a>.made + $<b>.made }
    method a($/)   { make $/.Int }
    method b($/)   { make $/.Int }
}

Esta separación tiene ventajas reales cuando una gramática crece: el patrón sigue siendo legible y puedes emparejar una gramática con varias clases de acciones — una que evalúe, otra que formatee, otra que construya una estructura de datos — sin tocar la gramática en absoluto.

La regla práctica: acciones en línea para algo pequeño y desechable, y una clase de acciones para cualquier cosa que vayas a mantener o reutilizar.

Práctica

Resuelve 1 cuestionario sobre el contenido de este tema.

Quiz — make   |   Quiz — Clases de acción


💪 O ve directamente a los ejercicios de esta sección.