Implementar un analizador sintáctico descendente para una gramática especificada.
El tipo de ASDR deberá ser implementado mediante procedimientos, esto es, deberá haber un procedimiento Principal, un procedimiento Procesar y luego un procedimiento por cada no terminal de la gramática. El programa que resulte de la implementación deberá aceptar una cadena y luego indicar si dicha cadena pertenece al lenguaje generado por la grmática y además deberá indicar qué producciones de la gramática deben ser usadas para derivar la cadena de entrada.
El símbolo distinguido es Programa. Los terminales se hallan entre “ ”, por ejemplo “var” es un terminal llamado var . Los no terminales no se hallan entre “ ” y siempre comienzan en mayúsculas, pudiendo contener mayúsculas intermedias para aclarar su significado. Terminales y No Terminales se hallan separados por espacios en blanco para claridad de la gramática.
Programa → Declaracion “;” Sentencia
| Sentencia
Declaracion → Declaracion “;” Declaracion
| Sentencia
Sentencia → Sentencia “;” Sentencia
| Identificador “:=” Expresion
| ”si” Expresion “entonces“ Sentencia “sino” Sentencia
| ”si” Expresion “entonces“ Sentencia
| “mientras” Expresion “hacer” Sentencia
Expresion → Literal
| Numero
| Identificador
| Expresion Op Expresion
| Expresion “[“ Expresion ”]”
| Expresion “(“ Expresion ”)”
| “aceptar” Literal Identificador
| “mostrar” Literal ListaIdentificadores
ListaIdentificadores → Identificador
| Identificador “,” ListaIdentificadores
Op → Relop
| Mulop
| Sumop
Relop → “== “| “>” |”<” | “>=” | “<= “ | “!=”
Mulop → “*“| “/” |”mod” | “and”
Sumop → “+“| “-” |”or”
Numero → ListaDigito
| ListaDigito "." ListaDigito
ListaDigito → Digito
| Digito ListaDigito
Literal → “’” ListaSimbolos “’”
Identificador → Letra
| Letra ListaSimbolos
ListaSimbolos → Letra
| Digito
| Letra ListaSimbolos
| Digito ListaSimbolos
Letra → “a”| ... |“z” | “A”| ... |“Z”
Digito → “0”| ... |“9”