s02 - 4 proyecto de programacion
TRANSCRIPT
PROYECTO DE PROGRAMACION
El ejercicio consiste en implantar un reconocedor lexicográfico y sintáctico de un compilador para un subconjunto de Pascal., el subconjunto es mínimo pero permite expresar programas (Las palabras reservadas han sido traducidas al español).
ESTRUCTURA DEL PROGRAMA.
Un programa consta de una secuencia de declaraciones de datos globales, una secuencia de declaraciones de procedimientos y funciones y una sola proposición compuesta que es el "programa principal".
El código siguiente es un ejemplo de un programa a reconocer:
PROGRAMA ejemplo(ENTRADA,SALIDA);VARIABLES x, y : ENTERO;FUNCION mcd(a,b : ENTERO) : ENTERO;VARIABLES x : ENTERO; n : ENTERO;INICIO x := a; n := b; SI n = 0 ENTONCES mcd:=x CASOCONTRARIO mcd := mcd(n, x RESTODIVIDIR n)FIN;INICIO LEER(x,y); x := x + 2; y := y * x ; ESCRIBIR(x,y);FIN.
SINTAXIS DE UN SUBCONJUNTO DEL PASCAL CON INSTRUCCIONES EN ESPAÑOL.
estructuradelprograma PROGRAMA id ( lista_identificadores ); declaraciones
declaraciones_subprogramas proposicion_compuesta .
lista_identificadores id | lista_identificadores , id
| oplib
declaraciones declaraciones VARIABLES lista_identificadores : tipo ;
|
tipo tipo_estandar
| ARREGLO [ num .. num ] DE tipo_estandar
tipo_estandar ENTERO | REAL | LOGICO
declaraciones_subprogramas declaraciones_subprogramas declaracion_subprograma ;
|
declaracion _subprograma encab_subprograma declaraciones proposicion_compuesta
encab_subprograma FUNCION id argumentos : tipo_estandar ; | PROCEDIMIENTO id argumentos ;
argumentos ( lista_parametros ) |
lista_parametros lista_identificadores : tipo | lista_parametros ; lista_identificadores : tipo
proposicion_compuesta INICIO proposiciones_optativas FIN
proposiciones_optativas lista_proposiciones |
lista_proposiciones proposicion | lista_proposiciones ; proposicion
proposicion variableasignable := expresion | proposicion_procedimiento | proposicion_compuesta | SI expresion ENTONCES proposicion CASOCONTRARIO proposición | REPETIR proposicion HASTA expresión | PARA id = num HASTA num HACER proposicion | MIENTRAS expresion HACER proposicion | LEER ( lista_identificadores ) | ESCRIBIR ( lista_identificadores )
variableasignable id | id [ expresion ]
proposicion_procedimiento id | id ( lista_expresiones )lista_expresiones expresion | lista_expresiones , expresion
expresion expresion_simple | expresion_simple oprel expresion_simple
expresion_simple termino | signo termino | expresion_simple opsuma termino
termino factor | termino opmult factor
factor id | id ( lista_expresiones ) | num | ( expresion ) | opneg factor
signo + | - CONVENCIONES LEXICOGRAFICAS.
1. Los comentarios se encierran entre { y }2. Los espacios en blanco entre los componentes léxicos son opcionales, con la excepción de que las
palabras clave deben ir encerradas entre espacios en blanco.3. El componente léxico id para los identificadores concuerda con una letra seguida de letras o dígitos:
id letra ( letra | digito )* letra [ a-zA-Z]digito [ 0 - 9 ]
El implantador puede desear poner límite a la longitud de un identificador
4. El componente léxico num concuerda con números sin signo
num digitos fraccion_optativa exponente_optativo digitos digito digito* fraccion_optativa . digitos | exponente_optativo E ( + | – | ) digitos |
5. Las palabras clave son reservadas y aparecen en negrita y mayúsculas.
6. Los operadores oprel son: =, < >, < =, > =, >
7. Los operadores opsuma son: + , - , o
8. Los operadores opmult son: *, /, divisionentera, restodividir, y
9. El operador opneg es: negacion
10. Los operadores oplib son: entrada , salida