1 - Análisis-Semántico
November 4, 2021 | Author: Anonymous | Category: N/A
Short Description
Download 1 - Análisis-Semántico...
Description
TECNOLÓGICO NACIONAL DE MÉXICO INSTITUTO TECNOLÓGICO DE ACAPULCO “Educación Tecnológica con Compromiso Social” Carrera: Ingeniería en Sistemas Computacionales Asignatura: Lenguajes y Autómatas II
Reporte de actividades de aprendia!e " pr#cticas Unidad : !eneración de código intermedio""
Co$petencia espec%&ica a desarro''ar #ise$a mediante el uso de reglas sem%nticas dirigidas por sinta&is' un anali(ador sem%ntico para un compilador"
Pro&esor( Sil)estre *edolla Solano Integrantes del e+uipo: ,
No$)rede'a'*$no( Pera'ta Arec,i-a Sa$*e' .a!ardo /arreiro Ed*ardo Rodri-*e Aparicio 0arina Mite' /a*tista santos A'e!andro
N+$erodecontro' ,-- ,-- ,--./01 ,--.22
Acapulco' !uerrero' 3&"' 0 de Septiem4re del .,0"
1ndice Contenido
Introd*cci2n.......................................................................................3 Actividad 34........................................................................................4 Detectar Errores Se$#nticos4..................................................................4 E!e$p'os De La Actividad Uno4 ..............................................................7 Actividad 54......................................................................................23 Dise6ar 7 Se'eccionar In&or$aci2n So)re La Constr*cci2n De Un Ana'iador Se$#ntico4.......................................................................................23 E!e$p'os De La Actividad Dos.............................................................28 Actividad 84...................................................................................... 46 Reconocer E' Mane!o De Tipos En Las E9presiones 7 E' Uso De Operadores4......46 Actividad :4......................................................................................54 Esta)'ecer Las Re-'as Para La Conversi2n De Tipos ;Castin-< En E9presiones4...54 Conversiones I$p'%citas.................................................................... 56 Conversiones E9p'%citas.................................................................... 56 E9cepciones De Las Conversiones De Tipos En Tie$po De E!ec*ci2n............ 58 Actividad =4...................................................................................... 59 A-re-ar Acciones Se$#nticas A La Estr*ct*ra De La Gra$#tica4.....................59 Actividad >4...................................................................................... 70 Manip*'ar La Ta)'a De Conversi2n De S%$)o'os 7 De Errores 7 Direcciones4...... 70 Actividad ?4......................................................................................65 Inte-rar E@*ipos De Tra)a!o Para La Constr*cci2n De Un Ana'iador Se$#ntico4. 65 Actividad 4...................................................................................... 81 Prop*esta De Pro"ecto Para E' Ana'iador LB9ico 7 Sint#ctico4....................... 81 Conc'*siones.................................................................................... 82 Bibliografía.................................................................................... 83
Actividad 34 Aplicar los tipos de notación para la conversión de expres iones: Infija, prefija y posfija
2.3 Los Esquema esquemasde degeneración generación son las estrategias o acciones que se deberán realizarse y tomarse en cuenta en el momento de generar código intermedio.
2
.
Los esquemas de generación dependen de cada lenguaje. Tomaremos algunos esquemas de generación del lenguaje C. Variables y constantes Las ariables y constantes deben separarse de tal manera que queden las e!presiones una por una de manera simple. "or ejemplo int a#b#c$ se descompone a int a$ int b$ intc$ respectiamente. E!presiones En esta %unción recibe una cadena que representa una l&nea de código intermedio y toma las medidas oportunas para que ese código se utilice. Estas medidas pueden ser escribir la l&nea en un %ic'ero adecuado# almacenar la instrucción en una lista que despu(s se pasará a otros módulos# o cualquier otra que necesitemos en nuestro compilador. E!presiones aritm(ticas )on aquella donde los operadores que interienen en ella son num(ricos# el resultado es un n*mero y los operadores son aritm(ticos. Los operadores aritm(ticos más com*nmente utilizados son+ ,#- # # / y 0. Comenzamos el estudio por las e!presiones aritm(ticas. Lo que tendremos que 'acer es crear por cada tipo de nodo un m(todo que genere el código para calcular la e!presión y lo emita. Ese código dejará el resultado en un registro# cuyo nombre deolerá el m(todo como resultado. "ara reserar estos registros temporales# utilizaremos una %unción# resera. En principio bastar 1a con que esta %unción deuela un registro distinto cada ez que se la llame. Cada nodo generará el código de la siguiente manera+ "or cada uno de sus operandos# llamara al m(todo correspondiente para que se eal*e la sub e!presión. )i es necesario# reserara un registro para guardar su resultado. Emitirá las instrucciones necesarias para realizar el cálculo a partir de los operandos.
nstrucciones de asignación La sinta!is general de la instrucción de asignación es+ nombredelaariable 4 alor El alor a la derec'a del signo igual puede ser una constante# otra ariable
3
o una e!presión que combine constantes y ariables# pero siempre la ariable y su alor deben ser del mismo tipo de dato. Ejemplos+ edad0 4 5 area6 4 72.3 nombre8 4 9"edro:
nstrucciones de asignación compuesta
Las instrucciones de asignación compuesta realizan primero una operación en una e!presión antes de asignarla a un elemento de programación. En el siguiente ejemplo se muestra uno de estos operadores# ,4# que incrementa el alor de la ariable del lado izquierdo del operador con el alor de la e!presión de la derec'a. ;na instrucción de asignación asigna el alor de una e!presión a una ariable. En general# si la ariable que se a a asignar es una propiedad# la propiedad debe ser de lectura y escritura o de sólo escritura$ en caso contrario# se produce un error de compilación. )i la ariable es una ariable de sólo lectura# la asignación debe producirse en un constructor )'ared o un constructor de instancia apropiado para el tipo de la ariable$ en caso contrario# se producirá un error de compilación. nstrucciones de control Esta %orma de programación sólo permite resoler problemas sencillos. "ara resoler problemas más complejos# nos puede interesar que dependiendo de los alores de los datos# se ejecuten unas instrucciones u otras. Las instrucciones condicionales nos an a permitir representar (ste tipo de comportamiento. )entencias < y )=TC>. En otros casos# nos encontraremos con la necesidad de repetir una instrucción o instrucciones un n*mero determinado de eces. En (stos casos utilizaremos instrucciones de control iteratias o repetitias ?ciclos@. )entencias =>LE# AB-=>LE y uals(%%! BB op.e>uals(%0%!! prf ) C; if (op.e>uals(%!%!! prf ) D; if (op.e>uals(%(%!! prf ) 1; return prf;
6
Actividad 54 Dise6ar " se'eccionar in&or$aci2n so)re 'a constr*cci2n de *n ana'iador se$#ntico4 Atri)*tos " Gra$#ticas con Atri)*tos
7
In5ormalmente' se llamar% atributos de un s&mbolo de la gramática a toda in5ormación a$adida en el %r4ol de deri)ación por el anali(ador sem%ntico' asociada a los sím4olos de los nodos anotados" Un componente importante de las gram%ticas de atri4utos es el algoritmo de c%lculo de los )alores" Ejemplos de atri4utos: o o o
Tipo de una )aria4le 6alor de una e&presión U4icación en memoria de una )aria4le
o o
Código de unsigni5icati)os procedimiento 78meroo4jeto de dígitos en un n8mero
Una gram%tica de atri4utos es una gram%tica independiente del conte&to en la cual a sus sím4olos terminales y no terminales se les dota de unos atri4utos y a sus producciones de unas 5unciones de e)aluación que 'acen que dic9os atri4utos se propaguen a tra)s de la gram%tica" Su 5in es conocer un determinado )alor de un atri4uto en cual+uier parte del %r4ol de deri)ación y tomar la decisión oportuna" Un atri4uto es una propiedad asociada a una estructura sint%ctica" Si una estructura sint%ctica representada por el sím4olo gramatical ; tiene asociado un atri4uto a lo representaremos por ;"a ? numero digito numero,")alor numero")alor B ,.
Las 5unciones sem%nticas relacionan los )alores de los atri4utos de5inidos so4re la gram%tica atri4uida y )an asociadas a producciones de la gram%tica atri4uida"
#e5inición 5ormal Una gram%tica de atri4utos est% 5ormada por una tripleta !A D!IC' A' F ! G gram%tica independiente del conte&to
8
A G atri4utos asociados a los sím4olos terminales y no terminales G 5unción de e)aluación' 5unción asociada a producción +ue determina como o4tener unos atri4utos en 5unción de otros dentro de la misma producción
a es un atri4uto asociado al sím4olo no terminal A y o4tiene su )alor en 5unción de los atri4utos: a asociado a ;,' 4 asociado a ; 'Hy ( asociado a ;m < es un atri4uto o4tenido en 5unción de la parte derec9a de la producción=
a es un atri4uto asociado al sím4olo ;, y o4tiene su )alor en 5unción de los atri4utos: a asociado a A' 4 asociado a ; @e)te!n@> @alse@> @Tnally@> @T)ed@> @o!@> @o!eac*@> @goto@> @i@> @im"licit@> @in@> @inte!ace@> @inte!nal@> @is@> @loc+@> @ne%@> @null@> @o"e!ato!@>@catc*@> @out@> @ove!!ide@> @"a!ams@> @"!ivate@> @"!otected@> @"ulic@> @!eadonly@> @!e@> @!etu!n@> @sealed@> @sieo@> @stac+alloc@> @static@> @s%itc*@> @t*is@> @t*!o%@> @t!ue@> @t!y@> @ty"eo@> @names"ace@> @unc*ec+ed@> @unsae@> @vi!tual@> @void@> @%*ile@> @Uoat@> @int@> @long@> @o=ect@> @get@> @set@> @ne%@> @"a!tial@> @yield@> @add@> @!emove@> @value@> @alias@> @ascending@> @descending@> @!om@> @g!ou"@> @into@> @o!de!y@> @select@> @%*e!e@> @=oin@> @e'uals@> @c*a!@> @decimal@> @doule@> @dynamic@> @syte@> @s*o!t@> @using@>@ool@> @st!ing@> @uint@>@yte@> @ulong@> @us*o!t@> @va!@> @class@> @st!uct@ ; cs&e)e!.Com"ile,ege)"tions.Com"iled ,ege)"tions.-)"licitCa"tu!e;
O
20
,ege)"tions.Singleline
O
load : t!ue; AnalieCode; t)Code./ocus; "!ivatevoid AnalieCode data!idie%1.,o%s.Clea!; EElv(o+en.tems.Clea!; int n : 0> e : 0; o!eac* va! t+1 in cs&e)e!.et(o+enst)Code.(e)t i t+1.Lame :: @-,,,@ eFF; i t+1.Lame :: @$-L(/CA$,@ i "ala!as,ese!vadas.Containst+1.&e)ema t+1.Lame : @,-S-,A$@; data!idie%1.,o%s.Addt+1.Lame>t+1.&e)ema>t+1.&inea>t+1.Columna>t+1.nde); EEst!ing cadena : t+1.Lame F @ @ Ft+1.&e)ema; EElv(o+en.tems.Addcadena; nFF; t*is.(e)t :st!ing./o!mat@Analiado! &e)ico H 0 to+ens 1 e!!o!es@ > n> e; EETn del metodo analiecode "!ivatevoid CodeC*angedo=ect sende!> -ventA!gs e i load AnalieCode;
En esta parte es donde de5inimos las )aria4les +ue guardaran la in5ormación +ue son los toens' le&emas' líneas e índice" using System; using System.Collections.ene!ic; using System.&in'; using System.(e)t; using System.(*!eading.(as+s; names"ace analiado!le)ico class(o+en "ulic (o+enst!ing name> st!ing le)ema> int inde)> int linea> int columna Lame : name; &e)ema : le)ema; nde) : inde); &inea : linea; Columna : columna; "ulicst!ing Lame get; set; "ulicst!ing &e)ema get; "!ivateset; "ulicint nde) get; "!ivateset;
21
"ulicint &inea get; "!ivateset; "ulicint Columna get; "!ivateset; "ulicint &eng*t get !etu!n &e)ema.&engt*;
\ por 8ltimo esta parte es donde e&trae las reglas y pala4ras reser)adas y las anali(ara y se compilara del te&to +ue introdu(ca en la caja de te&to" using System; using System.Collections.ene!ic; using System.&in'; using System.(e)t; using System.(*!eading.(as+s; using System.(e)t.,egula!-)"!essions; names"ace analiado!le)ico class,ege)&e)e! ,ege) !e); St!ingVuilde! "at!on; ool !e'uie!eCom"ila!; &istst!ing< (Lames; intGJ Lume!s; "ulic ,ege)&e)e! !e'uie!eCom"ila! : t!ue; (Lames : ne%&istst!ing o"tions; Lume!s : ne%intG(Lames.CountJ; st!ingGJ gn : !e).et!ou"Lames; o! int i : 0> id) : 0; i gn.&engt*; iFF i (Lames.ContainsgnGiJ Lume!sGid)FFJ : !e).!ou"Lume!/!omLamegnGiJ; !e'uie!eCom"ila! : alse; catc* -)ce"tion e) t*!o% e); EEEsumma!y< EEE Cuenta la cantidad de lineas "!esentes en un to+en> estalece el inicio de linea. EEEEsumma!y< "!ivateint CountLe%&inesst!ing to+en> int inde)> !eTnt linesta!t int line : 0; o! int i : 0; i to+en.&engt*; iFF i to+enGiJ :: NnN lineFF; linesta!t : inde) F i F 1; !etu!n line;
24
Actividad 84 25
Reconocer e' $ane!o de tipos en 'as e9presiones " e' *so de operadores4
“Un operador es un elemento de programa +ue se aplica a uno o )arios operandos en una e&presión o instrucción" Los operadores +ue re+uieren un operando' como el operador de incremento se conocen como operadores unario s" Los operadores +ue re+uieren dos operandos' como los operadores aritmticos Los operadores relacionales se usan para e&presar condiciones y descri4ir una relación entre dos )alores" *I7APIXS ?' Z' ?' Z' Y' 3ayor +ue' 3enor +ue' 3ayor o igual +ue' 3enor o igual +ue' Igual +ue' #i5erente +ue" I5
View more...
Comments