es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para especificar que al menos uno de a, b o c debe estar presente en expr, puedes usar el operador + en la gramática de la siguiente manera:

    grammar Foo;
    
    expr
       : (a | b | c)+
       ;
    

    Esta regla de la gramática coincide con una o más ocurrencias de cualquiera de a, b o c utilizando el operador +. Esto significa que la regla solo coincidirá con expresiones que contengan al menos uno de a, b o c.

    Usando esta regla, puedes simplificar la gramática dada a:

    grammar Foo;
    
    expr
       : (a | b | c)+
       ;
    

    Esto asegurará que solo sean válidas las expresiones que contengan al menos uno de a, b o c. 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.

Comments are closed.