Welcome to Scribd, the world's digital library. Read, publish, and share books and documents. See more ➡
Download
Standard view
Full view
of .
Add note
Save to My Library
Sync to mobile
Look up keyword
Like this
18Activity
×
0 of .
Results for:
No results containing your search query
P. 1
analisis sintactico

analisis sintactico

Ratings: (0)|Views: 3,890|Likes:
Published by sergiomtzp
tipos de analizadores sintacticos
tipos de analizadores sintacticos

More info:

Published by: sergiomtzp on Jan 29, 2010
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See More
See less

06/10/2013

pdf

text

original

 
39
 ANÁLISIS SEMÁNTICO DE PROGRAMAS ESCRITOS EN JAVA 
SEMANTIC ANALYSIS OF PROGRAMS WRITTEN IN JAVA 
L
UIS
G
 AJARDO
D
ÍAZ
1
 
 Y 
 
L
UIS
M
 ATEU
B
RULÉ
2
1
Depto. de Auditoría e Informática. Facultad de Ciencias Empresariales. Universidad del Bío-Bío. Avenida La Castilla s/n Chillán,Chile. Fono (42) 203414. Fax (42) 203421. E-mail: lgajardo@ubiobio.cl.
2
Depto. de Ciencias de la Computación. Facultad de Ingeniería. Universidad de Chile. Santiago, Chile.
RESUMEN
 Actualmente los lenguajes orientados a objetos son ampliamente utilizados en todas las áreas de desarrollo desoftware. Uno de sus principales exponentes, el lenguaje java, permite la construcción de programas demanera sencilla y elegante. Esto ha provocado que java sea muy utilizado en investigación, sirviendo delenguaje base sobre el cual implementar nuevas mejoras, funcionalidades o incluso dialectos. Generalmenteestas mejoras requieren de cambios a nivel de diseño del lenguaje, produciendo como resultado un analizadorsemántico de programas con estas nuevas características. Dado que no existen herramientas que apoyen elanálisis semántico de programas escritos en java, es común que los investigadores tengan que reescribir granparte de la funcionalidad del compilador de java para agregar sólo unos pocos cambios a nivel semántico. Laconstrucción de un analizador de programas en java involucra pasos como análisis léxico, análisis sintáctico y análisis semántico. Las dos primeras etapas son abordadas por lo general por medio de la utilización deherramientas que generan de manera automática analizadores sintácticos. Estos analizadores sintácticos cons-truyen una estructura tipo árbol que representa el programa fuente analizado. El problema que surge aquí esque estos árboles, al ser construidos automáticamente, son de un tamaño excesivamente grande ya que con-tienen más información de la que realmente se necesita almacenar. La manipulación de estos árboles escompleja, tediosa y es ineficiente en cuanto a espacio de almacenamiento y tiempo empleado en recorrer susnodos. Nuestro objetivo entonces es realizar un diseño ad-hoc que permita trabajar con un árbol mucho máspequeño y manejable el cual puede ser fácilmente modificado para incluir nuevas funcionalidades al lengua- je. El resultado de este trabajo es un analizador semántico de programas escritos en lenguaje java, diseñado encapas de manera de permitir la incorporación de cambios al nivel que se necesite sin reprogramar el analiza-dor completo desde cero.P
 ALABRAS
 
CLAVES
: Análisis de tipos, análisis semántico, árbol de sintaxis abstracta, java.
 ABSTRACT
 Actually, object oriented programming languages are used in all software development areas widely. One of the most known languages is Java, this programming language allows developing programs in a simple andelegant style. Java is used in researching very much because this fact, new facilities are implemented or evennew dialects are created on it. These improvements require changes to language design level generally; theresult is a program semantic analyzer with these new characteristics. Because there are no tools supportingsemantic analysis of Java programs, researchers have to rewrite the most of functionality of Java Compiler just for adding few semantic changes. Building a Java program analyzer involves lexical analysis, syntaxanalysis, semantic analysis, etc. Two first steps are usually solved using tools that generate syntax analyzersautomatically. These analyzers build a tree, which represents the traced source program. But with this solu-tion appears a problem; the automatically built trees are huge because they contain more information that itis necessary to store. Besides, working with these trees is complex, tedious, and inefficient in storage spaceand time for visiting their nodes. So our goal is to design a tool that works with a smaller and more manage-
Theoria 
, Vol. 13: 39-49, 2004ISSN 0717-196
 Artículo
 
40
Theoria 
, Vol. 13: 2004
able tree, a tree that may be modified easily when new facilities are added to the language. The result of this work is a Java program semantic analyzer designed in levels so changes may be incorporated in any desiredlevel without reprogramming all the analyzer.
EYWORDS
: Types analysis, semantic analysis, abstract syntax tree, java.
Recepción: 05/05/04. Revisión: 27/08/04. Aprobación: 22/10/04
1. INTRODUCCIÓN
En la actualidad los lenguajes orientados aobjetos son utilizados en una amplia gamade áreas, ya que permiten modelar procesos y entidades de una manera natural y sencilla.El lenguaje java está basado en el paradigmade la orientación a objetos desde su concep-ción, lo que ha dado origen a un lenguajeque posee construcciones sintácticas limpiasy elegantes. Esto ha provocado que java seamuy utilizado para educación e investigación.Es común encontrar investigadores quedesarrollan nuevas funcionalidades, mejoraso incluso nuevos dialectos de Java por mediode modificaciones a su gramática original.Nuestro estudio se centra principalmente eneste punto, ya que la complejidad de escribirnuevas funcionalidades o herramientassintácticas significa grandes esfuerzos y tiem-po de programación. Pese a que existen he-rramientas que realizan de manera automáti-ca el análisis sintáctico y la generación de unárbol de análisis, éstas no lo hacen de maneraeficiente y sencilla provocando demoras enlas operaciones realizadas sobre el árbol y com-plejidad en la mantención del mismo.Es por este motivo que nosotros propo-nemos un diseño ad-hoc que permite traba- jar con un árbol mucho más pequeño y ma-nejable el cual puede ser fácilmente modifi-cado para incluir nuevas funcionalidades allenguaje.
2. ANÁLISIS SINTÁCTICO
El análisis sintáctico, también llamado
 parsing
,consiste en agrupar los
tokens
del programafuente formando frases gramaticales las cua-les son usadas para comprobar si se deriva apartir de la gramática del lenguaje. Comoresultado de este proceso se genera, de unaforma explícita o implícita, un árbol de aná-lisis.La literatura clásica en el área de los com-piladores, como Aho
et al.
(1990), describedos tipos principales de analizadores sintác-ticos utilizados hoy en día: los métodosdescendentes y los métodos ascendentes. Esimportante mencionar que estos métodossólo trabajan con subclases de gramáticas y no con todas las existentes.Los analizadores descendentes, tambiénllamados
top-down
, construyen el árbol sin-táctico desde arriba (la raíz) hacia abajo (lashojas). Los analizadores ascendentes o
bottom-up
construyen el árbol comenzandopor las hojas hasta concluir en la raíz.Los métodos descendentes son más po-pulares, ya que se pueden implementar fá-cilmente a mano. Sin embargo, los métodosascendentes pueden manejar una gama másamplia de gramáticas. De forma que las he-rramientas de software que generan directa-mente analizadores sintácticos suelen utili-zar los métodos de análisis ascendente.Nuestro trabajo realiza el análisis sintác-tico de un programa fuente en java apoyadoen herramientas automáticas, las cuales se-rán comentadas más adelante. Sin embar-go, es importante destacar que el resultadode este análisis es un árbol, el cual posee undiseño creado íntegramente por nosotros, nopor las herramientas automáticas, y que per-mitirá facilitar las etapas posteriores. La Fi-gura 1 muestra el diagrama que representael análisis sintáctico.
 
41
Como el objetivo principal de este tra-bajo se orienta al análisis semántico, en estaetapa reuniremos información útil para lle-varlo a cabo, con esto reducimos el númerode recorridos al árbol en la etapa siguiente.La información recolectada consiste en de-claraciones de clases, interfaces y atributos,las cuales serán almacenadas en una estruc-tura denominada
 Repository
que consiste enun diccionario que asocia el nombre com-pleto de la clase o interfaz con un descriptor(un objeto ASClass o ASInterfaz respectiva-mente). Además existe sólo un repositoriodurante todo el proceso de análisis global, elcual se va completando en cada etapa. Final-mente como salida de esta etapa se obtieneuna representación del programa en formade un Arbol de Sintaxis Abstracta o AST elcual será utilizado para la etapa siguiente.
2.1. Herramientas para generaranalizadores sintácticos
Las herramientas que permiten generaranalizadores sintácticos dan la posibilidad alprogramador de trabajar a un nivel de abs-tracción más elevado que el que deberíanusar si las escribieran a mano. Existen 2 crí-ticas clásicas sobre los analizadores sintácti-cos creados automáticamente: 1) Los
 parsers
generados automáticamente son lentos y usan mucha memoria. 2) El reporte de erro-res no es tan exacto.Generalmente las etapas de análisis léxi-co y sintáctico son realizadas por distintasherramientas, esto permite independizar lasfunciones con lo cual podríamos lograr ma-yor flexibilidad. Las herramientas de análi-sis sintáctico se basan en uno de los dosmétodos explicados anteriormente, descen-dente o ascendente. Entre las que utilizanmétodos descendentes podemos mencionar JavaCC (Java Compiler Compiler), desarro-llada por Sun Microsystems (2000) y ANTLR (Another Tool for Language Recognition),escrita por Parr (1995). Por el contrario,entre las que utilizan métodos ascendentespodemos encontrar SableCC, desarrolladapor Gagnon y Hendren (1998), y CUP(Constructor of Useful Parsers), escrita porHudson (1997).Con el objeto de justificar la elección dela herramienta adecuada se presenta, en laTabla I, una comparación de las caracterís-ticas de cada herramienta.Los métodos de análisis ascendente sonmejores porque sus gramáticas no requieren
F
IGURA 
1. Análisis sintáctico o Parsing.
 Análisis semántico de programas escritos en Java / L. G
 AJARDO
D.
 Y 
L. M
 ATEU
B.

Activity (18)

You've already reviewed this. Edit your review.
1 hundred reads
1 thousand reads
Ana-leo Del liked this
Raul Bueno liked this
Miguel Arrieta liked this
Cristhian Graz liked this
gnuferock liked this
Julio Acosta liked this

You're Reading a Free Preview

Download
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->