Title | Informe final de lenguajes |
---|---|
Course | Lenguajes y Compiladores |
Institution | Universidad Nacional Mayor de San Marcos |
Pages | 23 |
File Size | 890 KB |
File Type | |
Total Downloads | 7 |
Total Views | 123 |
PROYECTO DE LENGUAJES Y COMPILADORES ANALIZADOR SINTACTICO UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS (Universidad del Decana De CURSO : LENGUAJES Y COMPILADORES TEMA : ANALIZADOR SINTACTICO PROFESOR : Ruiz de la Cruz Melo, Carlos ALUMNOS : Figueredo Girao, Giancarlos Fernandez Jimenez, Leonardo 14200...
PROYECTO DE LENGUAJES Y COMPILADORES
ANALIZADOR SINTACTICO
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS (Universidad del Perú, Decana De América)
CURSO: LENGUAJES Y COMPILADORES TEMA
: ANALIZADOR SINTACTICO
PROFESOR
: Ruiz de la Cruz Melo, Carlos
ALUMNOS :
Figueredo Girao, Giancarlos
14200085
Fernandez Jimenez, Leonardo 14200132
FACULTAD
: Ing. de Sistemas e Informática
E.A.P
:
Ingieneria de Sistemas
PERIODO ACADEMICO:
2018-I
TABLA DE CONTENIDO
ELEMENTOS DEL LENGUAJE 1. DELIMITADORES DE APERTURA Y CERRADURA 2. DELIMITADOR DE FIN DE SENTENCIA 3. IDENTIFICADORES 4. CONSTANTES 5. TIPO DE DATOS 6. OPERADORES 7. CLASE 8. DECLARACION DE CONSTRUCTOR 9. SUBPROGRAMAS O METODOS 10.SENTENCIAS DE CONTROL 11.LECTURA Y ESCRITURA 12. ANALIZADOR LEXICO 13. ANALIZADOR SINTACTICO
DESCRIPCION DEL LENGUAJE El lenguaje el cual crearemos se utilizara como guía el pseudocódigo y java, además también crearemos nuestra propia estructura del programa, expresiones, etc. A continuación haremos una breve descripción de nuestro lenguaje. ESTRUCTURA DE UN PROGRAMA
INICIO CONS_INICIO
CONS_FIN CLASE {
} CLASE {
} . . PRINCIPAL {
} FIN
Los caracteres permitidos son los siguientes: Alfabéticos: a,b,c,d,e,f,g,h,i,j,k,l,n,ñ,o,p,q,r,s,t,u,v,w,x,y,z A,B,C,D,E,F,G,H,I,J,K,L,N,Ñ,O,P,Q,R,S,T,U,V,W,X,Y,Z Numéricos: 0,1,2,3,4,5,6,7,8,9 con sus respectivas combinación. Símbolos: +, -, *, / , %, =, , ,, ;, ., ?, ¡ , |, {,},etc
1. DELIMITADORES DE APERTURA Y CERRADURA Se utilizara las palabras INICIO, FIN para apertura y fin del programa
INICIO ---inicio de programa: ---atributos ---clases ---principal FIN
---fin de programa:
Ejemplo: INICIO Clase CLIENTE Clase CUENTA PRINCIPAL FIN
También haremos uso de delimitadores de inicio y fin de clase/principal “{ } “
2. DELIMITADOR DE FIN DE SENTENCIA Al final de cada sentencia de comandos esta será remarcada con un “; “.
LEER (sumando);
3. ESTRUCTURA DEL PROGRAMA PRINCIPAL Programa principal: PRINCIPAL {
: Declaración de:
--- Atributos --- Objetos --- Main --- Métodos } :FIN:
4. INSTRUCCIONES
Asignación: Para realizar la asignación, se utilizarán los signos
terminales “EN…PON”, con esto se le asignará a cada identificador (variables, constantes) en la mayoría de casos. Ejemplo: EN (variable) PON (valor); EN sueldo PON 430; EN (variable) PON (expresión); EN bono PON a+b;
Lectura / Escritura Por Pantalla: En cuanto a la lectura de datos y/o
expresiones que ingresará el usuario se utilizará LEER; mientras que para que muestre el programa al usuario, ya sean las instrucciones se utilizará ESCRIBIR. EJM:
LEER ();
ESCRIBIR ;
5. IDENTIFICADORES Es el nombre que le vamos a dar a nuestras variables, clase o método. Se puede formar con cualquier carácter alfa numérico: dígitos (0-9) debiendo empezar siempre por un carácter alfabético. Los identificadores son sensibles a las mayúsculas y no deben pasar de 50caracteres. El tipo de dato solo se usan con las palabras reservadas.
;
6. CONSTANTES Se declararan al iniciar al programa si es que estas serán necesarias para dicho programa. Tendrán la palabra reservada CONS_INICIO seguido de un identificador, y por último el valor que se le asignara, y un CONS_FIN para cerrar esta parte. CONS_INICIO : Declaración de constantes: CONS_ FIN EJM: CONS_INICIO Pi n
3.1415; 5;
CONS_FIN
7. TIPOS DE DATOS A.- DATOS NUMÉRICOS
a) Enteros. Se considera entero cualquier valor numérico sin parte decimal independientemente de su rango. Para declaración de un tipo de dato entero se utilizara la palabra reservada ENTERO. ENTERO edad; b) Reales.
Se considera real cualquier valor numérico con parte decimal, independiente de su rango o precisión. Para la declaración de un tipo de dato real se utiliza la palabra reservada REAL. REAL sueldo; B.- DATOS LÓGICOS Se utiliza la palabra reservada BULEAN en su declaración. Contiene verdadero y falso. C.-DATOS DE TIPO CADENA Se utiliza la palabra reservada STRING en su declaración. Almacena una concatenación de caracteres. D.- DATOS DE TIPO CARÁCTER
Variables Alfabéticas: Letras del alfabeto mayúsculas y minúsculas.
Variables Numéricas: Números 0-9 y sus variaciones.
CAR: almacena un dato de tipo alfanuméricos, además de símbolos especiales.
8. OPERADORES a. Operadores aritméticos Los operadores aritméticos que usaremos son los siguientes: Operador
Nombre
Ejemplo
+
Resta Suma
x-y; x+y;
* / div mod
Multiplicación División División entera Modulo
x*y; x/y; x div y; x m y;
% ^
Porcentaje Exponencial
z%w x^y;
Ejemplos:
a*b/c mod d
//multiplicación, división, modulo
b. Operadores de relación Operador = < >
Nombre Igual a Menor que Mayor que
Ejemplo x==y; xy;
c. Operadores Lógicos Los operadores lógicos nos permiten manipulas valore booleanos verdad falso. Operador ? | ¡
Nombre Y lógico O lógico Negación
Ejemplo Si (x&y) Si(x|y) ¡y
Ejemplo: A verdad verdad Falso Falso
10.
B Falso verdad Falso verdad
A|B verdad verdad falso verdad
!A falso falso verdad verdad
DECLARACION DE UNA CLASE
A?B falso verdad falso falso
Para trabajar con clases inicializaremos con la palabra reservada CLASE seguido del identificador, luego el símbolo de apertura “{“y en esta parte escribimos el contenido que será Atributos, Constructor, Métodos. CLASE {
}
EJM: CLASE Persona { ENTERO edad; REAL sueldo; ENTERO num_hijos; :constructor: :métodos: }
11.
DECLARACIÓN DE UN CONSTRUCTOR
Los constructores tienen el mismo nombre que la clase, no retornan ningún valor y no pueden ser heredados.
TAP (argumento1, argumento 2) { … }
12.
SUBPROGRAMAS O METODOS
12.1
PROCEDIMIENTOS
Los procedimientos son subprogramas que se encargan de realizar sentencias, sin devolver ningún valor. Lo primero aquí es usar la palabra “PROCED” para especificar q usaremos un subprograma de tipo procedimiento PROCED () {
--}
EJM: PROCED Suma_numeros ( ENTERO a) { ENTERO b, suma; EN b PON 10; EN suma PON a+ b ; } 12.2
OPERACIÓN
Son un tipo de subprogramas que tienen como cualidad, el retorno de un valor. TION () {
……. RETORNAR ; }
EJM:
TION ENTERO Suma_numeros ( ) { ENTERO b, a, suma; EN b PON 10; EN a PON 20; EN suma PON a+ b ; RETORNAR suma; }
13.
CREACION DE OBJETOS Los objetos son instancias de la clase, este objeto viene a ser una entidad existente que tiene unas propiedades, ya sean atributos o datos que se almacenan por el mismo objeto. OBJ ();
EJM: Sea la clase Persona, crearemos una objeto alumno: OBJ Persona alumno ( ); Llamar a un método desde un objeto: Para llamar al método, usaremos “. “, con la siguiente estructura a observar.
. ; Ejemplo: Así, del ejemplo anterior; llamaremos a un método del objeto Alumno, en este caso tendremos el método Mostrar_Direccion. alumno . Mostrar_Direccion(dirección);
14.
SENTENCIAS DE CONTROL
13.1
CUANDO – CONTRARIO
Permite controlar qué procesos tienen lugar en función del valor de una o varias variables, es un equivalente a la sentencia conocida como “SI-SINO”. CUANDO( ){ instrucción 1 instrucción 2 …… instrucción n } CONTRARIO{ instrucción A instrucción B }
Ejemplo: REAL n1,n2,n3; Leer (n1,n2,n3); CUANDO REAL p = (n1 + n2 + n3/3) > 10.5{ escribir (“ aprobado”); }CONTRARIO { escribir (“desaprobado”); } 13.2 RECORRE Es un equivalente a la sentencia “para”. RECORRER (0 ;10 ;i + 1){ --}.
EJEMPLO GENERAL DE UN PROGRAMA INICIO CONS_INICIO Pi 3.1416; N5; CONS_FIN CLASE Empleado { [ ENTERO edad, código; REAL sueldo, gratificación; ] TAP empleado (ENTERO codigo1, ENTERO edad1, REAL sueldo1) { EN codigo PON codigo1; EN edad PON edad1; EN sueldo PON sueldo1; EN gratificación PON CALC sueldo * 0.10; } PROCED Poner_sueldo (ENTERO dinero) { EN Sueldo PON dinero; } TION REAL Sacar_sueldo ( ) { LEER(amb); RETORNAR sueldo; } } PRINCIPAL { [ REAL sueldo_aux; ] OBJ Empleado trabajador1 ; MAIN ( ) { LEER( valor); EN Sueldo_aux PON valor ; ESCRIBIR sueldo_aux; } } FIN
GRAMÁTICA G= ( Vn, Vt, S, P ) Vn
=
{ , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,, , , , ,, , , , , , ,, , . }
Vt= { INICIO, FIN, CONS_INICIO, CONS_FIN, CLASE, ;, {, }, [, ], ,, . , TAP, (, ), PON, +, - , * , / , %, ^ , DIV, MOD, ¡, |, ?,= , < , >, PROCED, TION, RETORNAR, PRINCIPAL,MAIN, OBJ, ENTERO, REAL, BOLEAN, CAR, LEER, ESCRIBIR, CUANDO, CONTRARIO, RECORRER, INT, DEC, ID, TRUE, FALSE,STRING,VEC,EN,CALL, CALC,BUL}
S = < Programa >
P:{ I NI CI O FI N
CONS_I NI CI O CONS_FI N
I D;/λ
/λ
CLASEI D{ } []
;/λ
/
I D , I D/λ TAPI D( ){} I D/λ ,/λ /λ ENI DPON;
I D///CALC
/λ
I D/( )/
/
+/-/*///% /^/di v/mod |/? =/ /λ
/
PROCED I D( ){}
/λ //
CALLI D. I D( ) ;
TI ONI D( ){
RETORNAR I D;}
PRI NCI PAL{
}
MAI N{ }
OBJ I D ();/λ
ENTERO /REAL/BOLEAN /CAR/ STRI NG
///
LEER(I D) ;
ESCRI BI RI D;
CUANDO ( ){ } CONTRARI O{ } /λ
RECORRER( ,, )
{ }
VECI D[I NT];
/ /
¡
BULI D=
/λ
/λ
/I D
I NT/ DEC
I D TRUE/ FALSE } .
ANALIZADOR LEXICO PANTALLA DE INTRODUCCION :
Esta es nuestra pantalla principal de nuestro analizador, aquí tendremos la opción de ingresar una cadena y que en una tabla nos muestre todo los caracteres ingresados y analizados acorde a nuestro lenguaje creado, en la siguiente tabla, “Tabla de Símbolos” que estará ya inicializada con nuestras palabras reservadas, operados, comparadores, etc. También se muestra un botón el cual nos permitirá realizar un “nuevo análisis“ para seguir probando nuestro analizador.
CREACION DE VECTORES
Se ha creado un vector para almacenar palabras reservadas, Caracteres, Operadores matemáticos, comparadores y operadores lógicos, que luego serán utilizados para la búsqueda y asignación de tokens.
METODOS PARA ASIGNAR Y BUSCAR TOKENS Métodos por los cuales se les asignara un token diferente a cada Palabra reservada, operadores, comparadores, etc. Estos tokens luego se mostraran en las tablas.
Palabras reservadas: Tokens del 1000 hacia delante Carácter: Tokens del 2000 hacia delante Operador matemático: Tokens del 3000 hacia delante Comparadores: Tokens del 4000 hacia delante. Operador lógico: Tokens del 5000 hacia delante.
TABLA DE SIMBOLOS...