Curso de Raku / Expresiones regulares y gramáticas / Gramáticas / Clases de acción / Exercises / Una gramática, dos clases de acción
Solución: Una gramática, dos clases de acción
Aquí tienes una posible solución para la tarea.
Código
grammar Pair {
token TOP { <a> ',' <b> }
token a { \d+ }
token b { \d+ }
}
class Sum { method TOP($/) { make $<a>.Int + $<b>.Int } }
class Diff { method TOP($/) { make $<a>.Int - $<b>.Int } }
say Pair.parse('10,20', actions => Sum.new).made;
say Pair.parse('10,20', actions => Diff.new).made;🦋 Puedes encontrar el código fuente en el archivo two-actions.raku.
Salida
30
-10Comentarios
La gramática solo describe la forma
número,número; no sabe nada de qué hay que calcular.Las dos clases de acciones adjuntan significados distintos al mismo análisis: una suma los números y la otra los resta. Pasar a
.parseun objetoactionsdistinto es todo lo que hace falta para obtener un resultado distinto, sin cambiar la gramática en absoluto.
Navegación del curso
← Una gramática, dos clases de acción | Haga una fecha legible →