TERMINALES
Para definir un comentario se utiliza CommentTerminal y en el Constructor se envian 3 parametros:- Nombre que se le dará al termino comentario
- Símbolo Inicial del Comentario
- Símbolo Final del Comentario
//TERMINALES DE COMENTARIO
CommentTerminal COMENTARIO_LINEA =
new CommentTerminal("COMENTARIO_LINEA", "//", "\n");
CommentTerminal COMENTARIO_LINEAS =
new CommentTerminal("COMENTARIO_LINEAS", "/*", "*/");
Es importante que se agreguen a la definicion para que no se tomen como terminales:
base.NonGrammarTerminals.Add(COMENTARIO_LINEA);
base.NonGrammarTerminals.Add(COMENTARIO_LINEAS);
Hay algunos terminales que hay por defecto en Irony, tales como definir uhn Identificador, un numero o una cadena:
- Identificador
IdentifierTerminal ID = new IdentifierTerminal("ID");
- Numero
NumberLiteral NUMERO = new NumberLiteral("NUMERO");
- Cadenas
StringLiteral CADENA = new StringLiteral("CADENA", "\"");
Donde el segundo parametro del constructor es el simbolo con el que empieza y termina la cadena
Ademas se pueden crear algunos terminales personalizados y para ello se utilizan expresiones regulares: Ejemplo:
RegexBasedTerminal palabra
= new RegexBasedTerminal("palabra", "[a-zA-Z]+");
NO TERMINALES
Los no terminales se definen de la siguiente manera:NonTerminal nonTerminal = new NonTerminal("nonTerminal");
Para definir las producciones en un no Terminal se utilizan las reglas y los terminales y no terminales se concatenan por medio de el signo +:
Ejemplo:
noTerminal.Rule = terminal + nonTerminal2
| terminal2 + nonTermial2;
Hay reglas especiales en Irony que simplifican las reglas:
- CREACION DE LISTAS
- Listas sin simbolo de separacion
palabras.Rule = MakePlusRule(palabras, palabra);
Reconoce:
palabra palabra1 palabra2 palabra3
Donde el primer parametro es el no terminal que define la lista, y el segundo es el elemento de la lista
- Listas con simbolo de separacion
l_ids.Rule = this.MakeListRule(l_ids, ToTerm(","), ID);
Reconoce:
id, id, id , id
Donde el primer parametro es el no terminal que define la lista, y el segundo es el simbolo separador de la lista y el tercero es el elemento de la lista.
No hay comentarios:
Publicar un comentario