Gramática del
Lenguaje de las Especificaciones Algebraicas.
En la definición de la gramática se va a hacer uso de una serie de operadores que el usuario debe conocer para entenderlo correctamente:
* implica que aquello que vaya dentro del paréntesis al que sucede se puede repetir 0 o más veces.
+ implica que aquello que vaya dentro del paréntesis al que sucede se puede repetir 1 o más veces.
[] implica que aquello que sea encerrado en ellos es opcional, puede o no aparecer.
| implica opcionalidad entre varias posibilidades.
Se debe saber también que <ID> (identificador) es una cadena de
caracteres que empiece por una letra, seguido de números, letras o “_” .
Definición de la
gramática:
“TIPO” <ID>
[“DOMINIOS” <ID>(“,”<ID>)*]
[“GENERICOS”
“TIPO”
<ID>
[“OPERACIONES”
( funcion() [“PRECONDICIONES” precondiciones()])+
]
| “FUNCION” funcion()
]
[“GENERADORES” (funcion())+]
[“CONSTRUCTORES” (funcion())+]
[“SELECTORES” (funcion())+]
[“AXILIARES” (funcion())+]
[“PRECONDICIONES” precondiciones()]
[“ECUACIONES” ecuaciones()]
funcion(): <ID> (“,”<ID>)*
”:”
[idToF()(“*”idToF())*]
(“->” | ”-/>”)
idToF()
precondiciones():
(decl_var())+ (precondicion())+
ecuaciones():
(decl_var())+ (regla())+
idToF():
<ID> [“(“ lista_idToF() “)”]
lista_idToF(): idToF() (“,”IDToF())*
decl_var():
<ID> (“,”<ID>)*
“:” idToF()
precondicion():
termino() “:” termino()
regla():
termino() “==” partederecha()
termino():
<ID> [“(“ termino() (“,”termino())*”)”]
partederecha(): termino()
| “SEA” lista_asignaciones() “EN” partederecha()
| “SI” termino() “ENTONCES” partederecha()
[“SI
NO” partederecha()]
lista_asignaciones(): (<ID> “=” termino())+