scieee Open visual document viewer

Construcción de un depurador portable de código. Evaluador de expresiones (LSI-2000-03)

Arjona Fernández, José Luis; Prieto Pérez, José M.; Corchuelo Gil, Rafael

Abstract

En este tercer artículo veremos la forma en la que podrá interactuar el usuario con el depurador, los comandos que podrá usar; para despues centrarnos en la construcción del evaluador de expresiones.

Full text

& 216758&&,Ï1'(81'(385$'253257$%/('(&Ï',*2  ( 9$/8$'25'((;35(6,21(6 José L. A jona Fe nández, José M. P ie o Pé ez, R. Co chuelo Gil Dp o. de Lenguajes y Sis emas In o má icos Facul ad de In o má ica y Es adí ica Uni e sidad de Se illa Web: h p://www.lsi.us.es En es e e ce a ículo e emos la o ma en la que pod á in e ac ua el usua io con el depu ado , los comandos que pod á usa ; pa a despues cen a nos en la cons ucción del e aluado de exp esiones. &RPDQGRV,QWHUDFFLyQFRQHOXVXDULR Una pa e p imo dial en el desa ollo del depu ado ha sido la in e acción que debe lle a a cabo en odo momen o con el usua io. Pensemos que la unción de un depu ado de código es la de ección de e o es en un p og ama. Pe o es a de ección se debe de basa en una colabo ación in ensa en e la pe sona que se enca gue de ello y el p opio depu ado . Pa a pode consegui es a colabo ación es esencial que el depu ado cuen e con una in e az de usua io a a és de la cual eciba odo ipo de ó denes po pa e del mismo. Es as ó denes se án ejecu adas po un obedien e depu ado . La in e az de usua io en nues o caso se basa en una línea de comandos, muy simila a la que o ecen los sis emas ope a i os in e ac i os ales como MS-DOS o UNIX. Po lo an o, la in e acción con el depu ado se lle a a cabo a a és de un p omp en pan alla p epa ado pa a ecibi las ó denes. Pensando siemp e en la posibilidad exis en e de que el p og ama que es emos depu ando cons e de a ios módulos con enidos en sus co epondien es iche os de ex o, el p omp es á pensado pa a que en odo momen o indique al usua io donde se encuen a den o del p og ama, y es o simplemen e se consigue indicando el nomb e del iche o po donde a la aza de la ejecución y la línea del mismo donde se encuen a esa aza. En conc e o, es e p omp iene el siguien e aspec o: ( iche o:línea)? _ Como ya se ha dicho con an e io idad, el depu ado o ece una se ie de ó denes o comandos, cada uno de los cuales iene una sin áxis y una semán ica de inida. La o e a de ó denes se ha in en ado que ue a lo más po en e posible pa a da la posibilidad al usua io de ealiza una aza del p og ama donde se le escapa an los menos de alles posibles. Un esumen de las ó denes que se p e enden implemen a se elacionan en la abla 1: ORDEN DESCRIPCIÓN ÏUGHQHVGHD XGD GHWDOOHV help Ayuda en línea del depu ado . O ece un esumen en pan alla de odos los comandos posibles. line Mues a en pan alla la línea del p og ama uen e po donde a la aza de ejecución. sou ce Mues a en pan alla el con enido de un iche o. Con es a o den se puede echa un is azo a los iche os que cons i uyen el p og ama uen e. ÏUGHQHVGHHMHFXFLyQ nex Se ejecu a la línea de código co espondien e a la si uación ac ual de la aza y se pasa a la siguien e ins ucción. s ep Idén ica a la o den QH[W con la di e encia esencial de que se sal a la ejecución de las u inas. un Se ejecu a el p og ama desde donde se es á has a que se llegue al inal de la ejecución o bien se e alúe un pun o de up u a a “cie o”. anima e Idén ica a la o den UXQ , solo que se puede especi ica un e aso en milisegundos en e cada ins ucción del p og ama que se ejecu a. ÏUGHQHVGHHYDOXDFLyQGHOYDORU WLSRGHXQDH[SUHVLyQ wa ch Pe mi e e alua una de e minada exp esión, de ol iendo su alo y su ipo. wha is Pe mi e an o mos a qué es cie o obje o de inido en el p og ama como e alua el ipo de un de e minada exp esión. ÏUGHQHVGHDVLJQDFLyQGHYDORUHV se Pe mi e asigna a un de e minado obje o del p og ama un alo . ÏUGHQHVGHPDQHMRGHSXQWRVGHUXSWXUD b eak Pe mi e coloca un pun o de up u a en algún pun o del p og ama. unb eak Pe mi e elimina un pun o de up u a p e iamen e colocado. b eak Pe mi e isualiza los pun os de up u a colocados. ÏUGHQHVGHVDOLGDGHOGHSXUDGRU exi Salida inmedia a de la ejecución del p og ama. TABLA 1. RESUMEN DE ÓRDENES DEL DEPURADOR. ([SUHVLRQHVGHOGHSXUDGRU Una ez que se ha dado una idea de como in e ac úa el depu ado con el usua io y de las ó denes que pod á ejecu a , enemos que pasa a de alla aspec os más conc e os ela i os a la línea de comandos del mismo. Po lo an o, es obliga o io dedica a una sección de es e a ículo a las exp esiones que pe mi e el depu ado . Po H[SUHVLyQ podemos en ende a un conjun o de RSHUDQGRV que se elacionan en e sí median e unos RSHUDGRUHV . Como consecuencia de al combinación, de la e aluación de una exp esión siemp e se gene a un alo conc e o. Po ejemplo, una exp esión muy simple pudie a se 1+1, donde se iene un solo ope ado (la suma, +) y dos ope andos (los núme os 1). Como se pod á imagina , exis en exp esiones muchos más complejas que es e ejemplo. De es a exp esión se gene a á un alo , en es e caso numé ico (2). Ya que podemos mezcla ope ado es di e en es en una misma exp esión, se necesi a de ini siemp e lo que se conoce como SUHFHGHQFLD y DVRFLDWLGDG de los mismos. Con p ecedencia se hace e e encia a la p io idad que se asigna a cada ope ado , es deci , qué o cual ope ado se e alúa an es que o o. La asocia i idad de los ope ado es hace e e encia al o den de e aluación de a ios ope ado es iguales. O o aspec o impo an e de las exp esiones es que cada una de ellas iene asociado un ipo, es deci , una de e minada exp esión puede se de ipo en e a, eal, e c. Debido a lo an e io , no se puede aplica no malmen e cualquie ope ado sob e cualquie ipo de ope ando. De es o que exis a lo que se llama FRPSDWLELOLGDGGHWLSRV en las exp esiones po la cual se especi ica qué ope ado es se pueden aplica a qué ipos de ope andos y cúal es el ipo del esul ado de ealiza dicha ope ación sob e los ope andos. Pues bien, el depu ado de ine sus p opios ope ado es, ni eles de p ecedencia, asocia i idad de los mismos, así como su sis ema de compa ibilidad de los ipos exis en es. Una posible g amá ica abs ac a pa a el e aluado de exp esiones del depu ado se ía: Bina ia :: i, d:Exp esion; op:Ope ado Bin /* OPERACIONES BINARIAS */ Una ia :: :Exp esion; op:Ope ado Un /* OPERACIONES UNARIAS */ /* OPERADORES BINARIOS */ Ope ado Bin :: Ope ado BA i /* A i mé icos */ | Ope ado BLog /* Lógicos */ | Ope ado BRel /* Relacionales */ | Ope ado BAcceso /* Acceso a Regis os, Uniones y A ays */ | Ope ado BAsig /* Pa a el comando SET -> Asignación*/ /* OPERADORES UNARIOS */ Ope ado Un :: MasU /* (+) una io */ | MenosU /* (-) una io */ | Indi eccion /* (*) Pa a pode accede al con enido de pun e os, di de memo ia */ | Di eccion /* (&) Di ección del obje o */ | No /* (!) in e so lógico */ Ope ado BA i :: Suma /* (+) Suma */ | Res a /* (-) Res a */ | Mul ip /* (*) Mul iplicacion */ | Di ision /* (/) Di isión */ Ope ado BRel :: Mayo /* (>) Mayo */ | Meno /* (<) Meno */ | Mayo Ig /* (>=) Mayo o igual */ | Meno Ig /* (<=) Meno o igual */ | Dis in o /* (!=) Dis in o */ | Ig /* (==) Igual */ Ope ado BLog :: And /* (&&) And lógico */ | O /* (||) O lógico */ Ope ado BAcceso :: Aa ay /* ([]) Acceso a un elemen o de un a ay */ | A egis o /* (.) Acceso a un campo de un egis o o unión*/ | A lecha /* (->) Acceso indi ec o a un campo del egis o o unión*/ 3UHFHGHQFLD DVRFLDWLYLGDGGHORVRSHUDGRUHV La abla 2 mues a odos los ope ado es del depu ado . Es án o denados desde la p ecedencia más al a, es deci , los más p io i a ios, hacia la p ecedencia más baja. Además, aquellos ope andos que se encuen an en e líneas ienen el mismo ni el de p ecedencia. Po o a pa e, en dicha abla ambién se indica la asocia i idad de los mismos, indicando con “izquie da” aquellos cuya asocia i idad es po la izquie da, con “de echa” aquellos que la ienen po la de echa y con “no asocia i o” aquellos a los que no se le aplica asocia i idad. 23(5$'25 '(6&5,3&,Ï1 $62&,$7,9,'$' 35(&('(1&,$ . Acceso a egis o Izquie da más al a [] Acceso a elemen o de un a ay Izquie da -> Acceso indi ec o a egis o Izquie da ! Negación lógica De echa + (una io) Más una io De echa - (una io) Menos una io De echa * (des e e encia) Con enido de un pun e o De echa & Di ección De echa * P oduc o Izquie da / Di isión Izquie da + Suma Izquie da - Res a Izquie da > Mayo que no asocia i o < Meno que no asocia i o >= Mayo o igual que no asocia i o <= Meno o igual que no asocia i o == Igual a no asocia i o != Dis in o de no asocia i o && And lógico Izquie da || O lógico Izquie da más baja TABLA 2. PRECEDENCIA Y ASOCIATIVIDAD DE LOS OPERADORES. &RPSDWLELOLGDGGHWLSRV Veamos aho a la compa ibilidad de ipos pa a el depu ado , la compa ibilidad de ipos impone es icciones sob e la u ilización de los ope ado es. Po ello es impo an e que quede absolu amen e cla o qué clase de alo es podemos combina con los dis in os ope ado es que se o ecen si se p e ende que la u ilización de las exp esiones en el depu ado sea co ec a. Pues o que básicamen e los ope ado es exis en es se pueden clasi ica en RSHUDGRUHV ELQDULRV (aquellos que necesi an dos ope andos pa a pode aplica se) y RSHUDGRUHV XQDULRV (aquellos que necesi an an solo un ope ando pa a pode aplica se), nos basa emos en es a clasi icación pa a mos a la compa ibilidad de ipos espec o a es os ope ado es. Es deci , dado un ope ado cualquie a, ¿qué ipos podemos combina con él? La abla 3 mues a la compa ibilidad de ipos espec o a los ope ado es una ios. Es os, en nues o caso son cinco, a sabe : el más y el menos una io (+,-), la indi ección o des e e encia (*), el ope ado de di ección (&) y el in e so lógico o negación (!). En dicha abla, las columnas ep esen an a es os ope ado es y las ilas a los dis in os ipos. Así po ejemplo, que exis a un “sí” en la casilla co espondien e a la ila “En e o” y a la columna “+/- (Una io)” signi ica que dicho ipo sí es compa ible espec o a es os ope ado es una ios y, po lo an o, una exp esión al como +6 ó -5 se ían co ec as. 8QDULR 1RW ,QGLUHFFLyQ 'LUHFFLyQ (QWHUR sí no no Sí % WH sí no no Sí 5HDO sí no no Sí %RROHDQR no sí no Sí &DUiFWHU no no no Sí &DGHQD no no no Sí (QXPHUDFLyQ sí no no Sí 9DF R no no no No $UUD no no no Sí 5HJLVWUR no no no Sí 8QLyQ no no no Sí 3XQWHUR no no sí Sí TABLA 3. COMPATIBILIDAD DE TIPO RESPECTO A LOS OPERADORES UNARIOS. En la abla 3 podemos obse a a ios pun os que pueden esul a con usos: • El ipo 9DF R es algo especial pues a él no le podemos aplica ninguno de los ope ado es an e io es. Es o es debido a que nunca nos amos a encon a con el caso de que exis an a iables de es e ipo. Po ejemplo, no iene sen ido que un compilado dé como álido una decla ación al como D9DF R pues ¿qué ep esen a la a iable “a”? ¿qué amaño ocupa en memo ia dicha a iable? Teó icamen e el ipo Vacío ep esen a el “nada”, ¿ iene algún sen ido ope a algo con la “nada”? E iden emen e, NO. Sin emba go, como en C, sí iene sen ido decla a a iables de ipo 3XQWHURD9DF R pa a ep esen a obje os que con ienen una di ección de memo ia que apun a a “yo no sé que ipo”, es deci , pa a ep esen a una di ección de memo ia gené ica. • El ope ado de di ección se puede aplica sob e cualquie ipo, excep uando al ipo 9DF R . Es o es así pues se puede ene en memo ia obje os de cualquie a de los ipos con los que se cuen a y po lo an o pod emos sabe su di ección con es e ope ando. Po o o lado, los ope ado es bina ios se pueden subdi idi a su ez en los siguien es g upos: 1. Ope ado es a i mé icos: + (suma), - ( es a), * (p oduc o), / (di isión). 2. Ope ado es elacionales: > (mayo ), < (meno ), >=(mayo o igual), <= (meno o igual), ==(igual), != (dis in o). 3. Ope ado es lógicos: && (and), || (o ). 4. Ope ado es de acceso: . (a egis o), [] (a a ay), -> (indi ec o a egis o). 5. Ope ado de asignación: =. La abla 4 mues a la compa ibilidad de los ipos espec o a los ope ado es a i mé icos, elacionales y lógicos. Los ope ado es de acceso y de asignación son un poco más especiales que es os. El encabezado ho izon al de dicha abla hace e e encia al ipo del ope ando a la de echa del ope ado co espondien e, mien as que el encabezado e ical se e ie e al ipo del ope ando a la izquie da de ese ope ado . 7pUPLQR ,]TXLHUGD 7pUPLQR'HUHFKD (QWHUR % WH 5HDO %RRO &DUDF &DGHQD (QXP 9DF R $UUD 5HJ 8QLRQ 3XQW (QWHUR A,R A,R A,R A,R A(+,-) % WH A,R A,R A,R A,R R A(+,-) 5HDO A,R A,R A,R A,R %RRO L R(==) &DUDF R &DGHQD R (QXP A,R A,R A,R A,R R A(+,-) 9DF R $UUD 5HJ 8QLRQ 3XQW R A(+,-.) R A(+,-) R A(+,-) R(1) (1) Independien emen e del ipo al que apun en. A: Ope ado es A i mé icos [en e pa én esis aquel subconjun o de és e a los que se aplica]. R: Ope ado es Relacionales [en e pa én esis aquel subconjun o de és e a los que se aplica]. L: Ope ado es Lógicos. casilla en blanco: los ipos no son compa ibles espec o a ningún ope ado . TABLA 4. COMPATIBILIDAD DE TIPOS EN OPERADORES BINARIOS ARITMÉTICOS, RELACIONALES Y LÓGICOS. Po úl imo, la abla 5 mues a la compa ibilidad de ipos espec o al ope ado de asignación. La lec u a que se hace de la misma es idén ica a la abla 4, excep o que en es e caso solo se indica si es compa ible, o no lo es, asigna al ipo de la exp esión de la izquie da del signo de asignación (=) el ipo de la de echa del mismo. 7pUPLQR ,]TXLHUGD 7pUPLQR'HUHFKD (QWHUR % WH 5HDO %RRO &DUDF &DGHQD (QXP 9DF R $UUD 5HJ 8QLRQ 3XQW (QWHUR sí sí No no no no Sí no no no no no % WH no sí No no no no No no no no no no 5HDO sí sí Sí no no no Sí no no no no no %RRO no no No sí no no No no no no no no &DUDF no no No no sí no No no no no no no &DGHQD no no No no no sí No no no no no no (QXP sí sí No no no No Sí no no no no no 9DF R no no No no no No No no no no no no $UUD no no No no no No No no sí(1) no no no 5HJ no no No no no No no no no sí(2) no no 8QLRQ no no No no no No no no no no sí(3) no 3XQW sí sí No no No No sí no no no no sí(4) (1): ambos a ays deben se es uc u almen e iguales. (2): ambos egis os deben se es uc u almen e iguales. (3): ambas uniones deben se es uc u almen e iguales. (4): ambos pun e os deben apun a a obje os ipos “asignables”, o bien alguno de ellos se un “Pun e o a Vacío”. TABLA 5. COMPATIBILIDAD DE TIPOS EN LA ASIGNACIÓN. 7LSR5HVXOWDGRGHODHYDOXDFLyQGHXQDH[SUHVLyQ La abla 6 mues a la o alidad de combinaciones a i mé icas posibles que podemos hace con dichos cua o ipos numé icos ( an o a ni el de ope ado es bina ios como una ios) y a su ez el ipo que se induce de e alua la exp esión a i mé ica con la combinación co espondien e. 2SHUDGRUHV%LQDULRV 7pUPLQR 7pUPLQR'HUHFKR 2SHUDGRUHV ,]TXLHUGR (QWHUR % WH (QXPHUDFLyQ 5HDO 8QDULRV (QWHUR En e o En e o En e o Real En e o % WH En e o By e En e o Real By e (QXPHUDFLyQ En e o En e o En e o Real En e o 5HDO Real Real Real Real Real TABLA 5. TIPOS EVALUADOS EN EXPRESIONES NUMÉRICAS. Con espec o a los ope ado es lógicos y elacionales, deci que el ipo del esul ado de la e aluación se á siemp e lógico, es deci , o CIERTO o FALSO. El esul ado de los ope ado es de acceso a uniones y egis os se á el ipo de inido pa a el campo al que es amos accediendo. Igualmen e al accede a un a ay el ipo esul ado se á el ipo base del a ay (el ipo de los elemen os almacenados en el a ay). Al aplica el ope ado de con enido (*) sob e un pun e o, ob end emos como ipo esul ado el ipo del obje o apun ado po ese pun e o. Igualmen e, el ope ado di ección (&) sob e un obje o de WLSRD cualquie a da á como ipo esul ado un pun e o a WLSRD (OHYDOXDGRUGHH[SUHVLRQHV Una ez de inidas la p ecedencia, asocia i idad y la compa ibilidad de ipos pa a las exp esiones que pe mi i á el depu ado , la o ma de p ocede se á la siguien e: 1. Se analiza á léxicamen e y sin ác icamen e la exp esión. 2. Se analiza á semán icamen e, pa a ello a pa i del á bol de sin axis abs ac a de la exp esión, se á necesa io hace un chequeo de ipos que nos pe mi a sabe si la exp esión es semán icamen e co ec a (los ope ado es pueden se aplicados a los ope andos). También se ía necesa io comp oba si el usua io in oduce co ec amen e los índices de los a ays o si accede a campos exis en es de egis os... 3. Una ez de e minada que la exp esión es co ec a, sólo queda ía da el esul ado de su e aluación. Análisis léxico Análisis sin ác ico Análisis semán ico Exp esión Tokens Á bol de sin axis Abs ac a Resul ado de e alua la exp esión )LJXUD3URFHVRGHHYDOXDFLyQGHH[SUHVLRQHV