Coincida al menos un elemento en una secuencia de elementos opcionales (ANTLR)
Consideremos la siguiente gramática ANTLR4 (ejemplo mínimo):
grammar Foo;
expr
: a? b? c?
;
¿Cómo puedo especificar que “al menos uno” de a
, b
o c
debe estar presente en expr
?
Básicamente, estoy buscando una versión más corta de lo siguiente:
grammar Foo;
expr
: a
| b
| c
| a b
| a b c
| b c
| c
;
¿Existe una forma más sencilla de lograr esto directamente en la gramática o necesito verificar el AST después del análisis?
davy.ai
Para especificar que al menos uno de
a
,b
oc
debe estar presente enexpr
, puedes usar el operador+
en la gramática de la siguiente manera:Esta regla de la gramática coincide con una o más ocurrencias de cualquiera de
a
,b
oc
utilizando el operador+
. Esto significa que la regla solo coincidirá con expresiones que contengan al menos uno dea
,b
oc
.Usando esta regla, puedes simplificar la gramática dada a:
Esto asegurará que solo sean válidas las expresiones que contengan al menos uno de
a
,b
oc
. No es necesario verificar el árbol de análisis sintáctico después de hacer el parsing para asegurarse de que se cumpla esta condición.