Resultado de la compilación
Secuencia de tokens <TIPO, lexema> que recibe el analizador sintáctico.
| # | Lexema | Token | Categoría | Línea | Col. |
|---|
Identificadores declarados en el programa, por ámbito.
| Nombre | Categoría | Tipo | Ámbito | Parámetros | Línea |
|---|
EBNF: { x } se repite cero o más veces, [ x ] es opcional y | separa alternativas.
programa -> PROGRAM ID ';' bloque '.'
bloque -> [ seccionConst ] [ seccionVar ] { declSubprograma }
sentenciaCompuesta
seccionConst -> CONST defConst { defConst }
defConst -> ID '=' constante ';'
constante -> [ '+' | '-' ] ( NUM_ENTERO | NUM_REAL )
| CADENA | TRUE | FALSE
seccionVar -> VAR declVar { declVar }
declVar -> listaIds ':' tipo ';'
listaIds -> ID { ',' ID }
tipo -> INTEGER | REAL | BOOLEAN | CHAR | STRING
declSubprograma -> declProcedimiento | declFuncion
declProcedimiento -> PROCEDURE ID [ parametros ] ';' bloque ';'
declFuncion -> FUNCTION ID [ parametros ] ':' tipo ';' bloque ';'
parametros -> '(' grupoParam { ';' grupoParam } ')'
grupoParam -> listaIds ':' tipo
sentenciaCompuesta -> BEGIN listaSentencias END
listaSentencias -> sentencia { ';' sentencia }
sentencia -> asignacion | llamadaProc | sentenciaCompuesta
| sentenciaIf | sentenciaWhile | sentenciaFor
| sentenciaRepeat | ε
asignacion -> ID ':=' expresion
llamadaProc -> ID [ '(' [ listaExpr ] ')' ]
sentenciaIf -> IF expresion THEN sentencia [ ELSE sentencia ]
sentenciaWhile -> WHILE expresion DO sentencia
sentenciaFor -> FOR ID ':=' expresion ( TO | DOWNTO ) expresion
DO sentencia
sentenciaRepeat -> REPEAT listaSentencias UNTIL expresion
listaExpr -> expresion { ',' expresion }
expresion -> expSimple [ opRelacional expSimple ]
expSimple -> [ '+' | '-' ] termino { opSuma termino }
termino -> factor { opMult factor }
factor -> NUM_ENTERO | NUM_REAL | CADENA | TRUE | FALSE
| ID [ '(' [ listaExpr ] ')' ]
| '(' expresion ')' | NOT factor
opRelacional -> '=' | '<>' | '<' | '<=' | '>' | '>='
opSuma -> '+' | '-' | OR
opMult -> '*' | '/' | DIV | MOD | AND
| Categoría | Expresión regular |
|---|---|
| Identificador | [a-zA-Z_][a-zA-Z0-9_]* |
| Número entero | [0-9]+ |
| Número real | [0-9]+\.[0-9]+([eE][+-]?[0-9]+)? |
| Cadena | '([^'\n] | '')*' |
| Asignación | := |
| Relacionales | = <> < <= > >= |
| Aritméticos | + - * / div mod |
| Delimitadores | ( ) ; : , . |
| Comentarios | {...} (*...*) //... |