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.

Cantidad opcional de variables declaradas en el analizador de Bison

Soy nuevo en bison (y en flex, que estoy usando junto a bison) y en programación en general. Estoy tratando de crear una regla de parser que permita la entrada de un archivo y pueda manejar cualquier cantidad de variables que pueda contener el archivo.

Lo que tengo actualmente es algo como esto:

body:
    BEGIN optional_statement optional_statement optional_statement END ';';

optional_statement:
    statement |
    ;

Obviamente, esta sería una solución finita y también he considerado el uso de un bucle, pero el manual de bison que he estado utilizando dice “los bucles están más allá del alcance de este manual”. He intentado buscar otras soluciones específicas de bison sin éxito. Si alguien puede orientarme en la dirección correcta para formatear este bucle o encontrar otra solución, estaría muy agradecido.

Aquí tienes una idea del tipo de entrada que estoy buscando, podría tener una declaración o diez:

a: boolean es true
b: integer es 21
c: integer es 7
d: integer es 18
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en c++, análisis sintáctico y bison, aquí está mi sugerencia para crear una regla de análisis que permita la entrada desde un archivo con cualquier número de variables:

    Podrías utilizar lo que se llama una “producción repetida” en bison para permitir un número ilimitado de declaraciones opcionales. Aquí tienes un ejemplo:

    body:
      BEGIN stmt_list END ';';
    
    stmt_list:
      /* vacío */ | stmt_list statement;
    
    statement:
      ID ':' TYPE 'es' expr;
    

    En este ejemplo, stmt_list es un no terminal que puede repetirse un número ilimitado de veces. La producción stmt_list se define utilizando una regla autorreferencial, donde puede estar vacía o contener una declaración, seguida de otro stmt_list. Cada declaración tiene el formato de ID : TYPE es expr, donde ID representa el nombre de la variable, TYPE representa el tipo de dato, y expr representa la expresión que se asigna a la variable.

    Utilizando esta producción, tu archivo de entrada podría contener cualquier número de declaraciones de variables en el siguiente formato:

    BEGIN
      a: boolean es true;
      b: integer es 21;
      c: integer es 7;
      d: integer es 18;
    END;
    

    Espero que esto te ayude a lograr la regla de análisis que estás buscando. ¡Avísame si tienes alguna otra pregunta!

Comments are closed.