next up previous
Next: LFIAML.ML Up: No Title Previous: SCANORD.MLL

PARORD.MLY

En este fichero se define la gramática que seguirán las órdenes que se introducen a la aplicación. El resultado del análisis sintáctico devuelve un tipo de dato ent-ord. La línea de orden debe incluir el nombre de un comando y, eventualmente, una expresión en lógica de predicados (dependiendo del comando).

La expresión puede ser atómica (hecho), o una implicación. Para los nombres de predicados se deben utilizar letras minúsculas. Para los términos se considera que los nombres en minúsculas son constantes, mientras que los nombres en mayúsculas se reservan para variables.


El código resultante es:
%{
#open "fichia";; 
#open "scanord";;
%}
%token PI PD EOL IMPLICA AND COMA EMPTY SAVE IN DROP PROOF LIST SALIR
%token  NOMBREMAY NOMBREMIN
%start Entrada
%type  Entrada
%%
        Entrada:
                Linea EOL                       {$1}
        ;

        Linea: 
                EMPTY           {ORD (Empty,[])}
                |SAVE Expr      {ORD (Save,[$2])}
                |IN Expr        {ORD (In,[$2])}
                |DROP Expr      {ORD (Drop,[$2])}
                |PROOF Expr     {ORD (Proof,[$2])}
                |LIST           {ORD (List,[])}
                |SALIR          {ORD (Salir,[])}
        ;

        Expr: 
                Atomica                         {Exp ($1,[])}
                |Antecedentes IMPLICA Atomica   {Exp ($3,$1)}
        ;

        Antecedentes: 
                Atomica {[$1]}
                |Atomica AND Antecedentes       {$1::$3}
        ;

        Atomica:
                NOMBREMIN PI Terms PD           {At ($1,$3)}
        ;

        Terms:
                NOMBREMIN                       {[Con $1]}
                |NOMBREMAY                      {[Var $1]}
                |NOMBREMIN COMA Terms           {(Con $1)::$3}
                |NOMBREMAY COMA Terms           {(Var $1)::$3}
        ;;
                
%%



David E. Losada Carril
Thu Oct 10 11:55:26 MET 1996