Está en la página 1de 24

lOMoARcPSD|10147875

Informe final de lenguajes

Lenguajes y Compiladores (Universidad Nacional Mayor de San Marcos)

StuDocu is not sponsored or endorsed by any college or university


Downloaded by DONAL JAM (donateloh93@gmail.com)
lOMoARcPSD|10147875

PROYECTO DE LENGUAJES Y
COMPILADORES

ANALIZADOR SINTACTICO

Downloaded by DONAL JAM (donateloh93@gmail.com)


lOMoARcPSD|10147875

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

Downloaded by DONAL JAM (donateloh93@gmail.com)


lOMoARcPSD|10147875

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

Downloaded by DONAL JAM (donateloh93@gmail.com)


lOMoARcPSD|10147875

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
<constantes>
CONS_FIN
CLASE <identificador>{
<atributos>
<métodos>
}
CLASE <identificador2> {
<atributos>
<métodos>
}
.
.
PRINCIPAL {
<atributos>
<objetos>
<main>
<métodos>
}
FIN

Downloaded by DONAL JAM (donateloh93@gmail.com)


lOMoARcPSD|10147875

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 “; “.

Downloaded by DONAL JAM (donateloh93@gmail.com)


lOMoARcPSD|10147875

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 (<identificador>);

Downloaded by DONAL JAM (donateloh93@gmail.com)


lOMoARcPSD|10147875

ESCRIBIR <identificador>;
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.

<tipo_de_dato> <identificador>;

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 3.1415;
n 5;

CONS_FIN

7. TIPOS DE DATOS
A.- DATOS NUMÉRICOS

Downloaded by DONAL JAM (donateloh93@gmail.com)


lOMoARcPSD|10147875

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 x-y;
+ Suma x+y;

Downloaded by DONAL JAM (donateloh93@gmail.com)


lOMoARcPSD|10147875

* Multiplicación x*y;
/ División x/y;
div División entera x div y;
mod Modulo x m y;
% Porcentaje z%w
^ Exponencial x^y;

Ejemplos:

a*b/c mod d //multiplicación, división, modulo

b. Operadores de relación

Operador Nombre Ejemplo


= Igual a x==y;
< Menor que x<y;
> Mayor que x>y;

c. Operadores Lógicos

Los operadores lógicos nos permiten manipulas valore booleanos verdad falso.

Operador Nombre Ejemplo


? Y lógico Si (x&y)
| O lógico Si(x|y)
¡ Negación ¡y

Ejemplo:

A B A|B !A A?B
verdad Falso verdad falso falso
verdad verdad verdad falso verdad
Falso Falso falso verdad falso
Falso verdad verdad verdad falso

10. DECLARACION DE UNA CLASE

Downloaded by DONAL JAM (donateloh93@gmail.com)


lOMoARcPSD|10147875

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 <identificador> {

<atributos>

<constructor>

<métodos> }

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 <identificador> (argumento1, argumento 2) {



}

12. SUBPROGRAMAS O METODOS

Downloaded by DONAL JAM (donateloh93@gmail.com)


lOMoARcPSD|10147875

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 <identificador> (<argumentos>) {


<desarrollo>
---
}

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 <tipo> <identificador> (<argumentos>) {


<desarrollo>
…….

RETORNAR <identificador>;
}

EJM:

Downloaded by DONAL JAM (donateloh93@gmail.com)


lOMoARcPSD|10147875

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 <Nombre_de_Clase><Nombre_del_Objeto>(<argumentos>);

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.

<Nombre_del_Objeto> . <método_del_objeto>;

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

Downloaded by DONAL JAM (donateloh93@gmail.com)


lOMoARcPSD|10147875

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(<condicion> ){
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){ <--0:inicio de recorrido; 10:fin de recorrido; + 1:
crecimiento de i; i:índice>
---
}.

Downloaded by DONAL JAM (donateloh93@gmail.com)


lOMoARcPSD|10147875

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

Downloaded by DONAL JAM (donateloh93@gmail.com)


lOMoARcPSD|10147875

GRAMÁTICA

G= ( Vn, Vt, S, P )

Vn = { <programa>, <cuerpo>, <constantes>, <list_const>, <list_clases>, <clase>,


<constructor>, <atributos>, <list_atrib>, <lista_nomb>, <varios_nomb>,
<constructor>, <list_asignaciones>, <argumentos>, <list_argumentos>,
<list_asiganciones>, <asignación>, <variante> <exp>, <operación>, <oper>,
<operasi>, <operador>, <op_matematico>, <op_logico>, <comparador>,
<list_metodos>, <método>, <procedimiento>, <list_desarrollo>,
<varios_desarrollos>, <desarrollo>, <llamada>, <operation>, <principal>, <objetos>,
<tipo>, <funciones>, <lectura>,<mostrar>, <condicional>, <recorrer>, <condicion>,
<numero>,<vector>, <boleanico>, <cond_numer>, <concate_log>, <multi>,
<concatenar>, <op_logne>,, <iden_clase>, <boleana>. }

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:{
<pr
ogr
ama>  I
NICI
O <cuer
po>FI
N

<cuer
po>  <const
ant
es><l
i
st_cl
ases><pr
inci
pal
>

<const
ant
es>  CONS_I
NICI
O <l
i
st_const
>CONS_FI
N

<l
i
st_const
>  I
D<numer
o>;<l
i
st_const
>/λ

<l
i
st_cl
ases>  <cl
ase><l
i
st_cl
ases>/λ

Downloaded by DONAL JAM (donateloh93@gmail.com)


lOMoARcPSD|10147875

<cl
ase>  CLASEI
D{<at
ri
but
os> <cons
truct
or><l
i
st_met
odos
>}

<at
ri
but
os>  [<l
i
st_at
ri
b>]

<l
i
st_at
ri
b>  <v
ari
ant
e>;<l
i
st_at
ri
b>/λ

<v
ari
ant
e>  <t
i
po> <l
i
sta_nomb>/<v
ect
or>

<l
i
sta_nomb>  I
D<v
ari
os_nomb>

<v
ari
os_nomb> ,
ID<v
ari
os_nomb>/λ

<const
ruct
or>  TAPI
D(<ar
gument
os>){<l
i
st_as
ignac
iones>}

<ar
gument
os>  <t
i
po>I
D<l
i
st_ar
gument
os>/λ

<l
i
st_ar
gument
os>  ,<ar
gument
os>/λ

<l
i
st_asi
gnaci
ones> <asi
gnaci
on><l
i
st_as
ignaci
ones>/λ

<asi
gnaci
on>  ENI
DPON<exp>;

<exp>  I
D/<numer
o>/<bol
eana>/CALC<oper
aci
ón>

<oper
aci
ón>  <oper
asi
> <oper
>

<oper
>  <oper
ador
><oper
asi
><oper
>/λ

<oper
asi
> I
D/(
<oper
aci
on>)/<numer
o>

<oper
ador
>  <op_mat
emat
i
co>/
<op_l
ogi
co>

<op_mat
emat
i
co>  +/-/*///% /^/di
v/mod

<op_l
ogi
co>  |/?

<compar
ador
> =/</>

<l
i
st_met
odos> <met
odo> <l
i
st_met
odos>/λ

<met
odo>  <pr
ocedi
mient
o>/
<oper
ati
on>

Downloaded by DONAL JAM (donateloh93@gmail.com)


lOMoARcPSD|10147875

<pr
ocedi
mient
o>  PROCED I
D(<ar
gument
os>){<l
i
st_desar
rol
l
o>}

<l
i
st_desar
rol
l
o>  <desar
rol
l
o><v
ari
os_desar
rol
l
os>

<v
ari
os_desar
rol
l
os> <desar
rol
l
o><v
ari
os_desar
rol
l
os>/λ

<desar
rol
l
o>  <asi
gnaci
on>/<f
unci
ones>/
<ll
amada>

<l
l D.
amada>  CALLI I
D(<ar
gument
os>)
;

<oper
ati
on> TI
ON<t
i
po>I
D(<ar
gument
os>){
<li
st
_desar
rol
l
o>
RETORNAR I
D;}

<pr
inci
pal
>  PRI
NCI
PAL{<at
ri
but
os><obj
etos><mai
n>
<l
i
st_mét
odos>}

<mai
n>  MAI
N{<l
i
st_desar
rol
l
o>}

<obj
etos> OBJ<i
den_cl
ase> I
D (<ar
gument
os>);<obj
etos>/λ

<t
i
po> ENTERO /REAL/BOLEAN /CAR/
STRI
NG

<f
unci
ones> <l
ect
ura>/<most
rar
>/<condi
ci
onal
>/<r
ecor
rer
>

<l
ect
ura> LEER(I
D);

<most
rar
> ESCRI
BIRI
D;

<condi
ci > CUANDO (
onal <condi
ci
on>){
<desar
rol
l
o>}<condi
ci
onal
i
>

<condi
ci > CONTRARI
onal
i O{<desar
rol
l
o>}

<r
ecor
rer
> RECORRER(
<numer
o>,<numer
o>,
<oper
aci
ón>)
{
<desar
rol
l
o>}

<v
ect
or> VEC<t
i
po>I
D[I
NT];

<condi
ci
on>  <bol
eani
co>/
<cond_numer
>/<negat
i
vo>

<negat
i
vo>  <op_l
ogne><bol
eani
co>

<op_l
ogne> ¡

Downloaded by DONAL JAM (donateloh93@gmail.com)


lOMoARcPSD|10147875

<bol
eani
co>  BULI
D=<bol
eana><concat
e_l
og>

<concat og> <op_l


e_l ogi
co><bol
eani
co>/λ

>  <mul
<cond_numer t
i><compar
ador
><mul
t
i><concat
enar
>

<concat
enar
>  <op_l
ogi
co><cond_numer
>/λ

<mul
t
i>  <numer
o>/I
D

<numer
o> I
NT/
DEC

<i
den_cl
ase> I
D

<bol
eana> TRUE/
FALSE

}
.

Downloaded by DONAL JAM (donateloh93@gmail.com)


lOMoARcPSD|10147875

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.

Downloaded by DONAL JAM (donateloh93@gmail.com)


lOMoARcPSD|10147875

 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.

Downloaded by DONAL JAM (donateloh93@gmail.com)


lOMoARcPSD|10147875

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.

Downloaded by DONAL JAM (donateloh93@gmail.com)


lOMoARcPSD|10147875

 TABLA DE SIMBOLOS

Downloaded by DONAL JAM (donateloh93@gmail.com)


lOMoARcPSD|10147875

Downloaded by DONAL JAM (donateloh93@gmail.com)

También podría gustarte