1er informe - analizador sintactico

Upload: neoslayfer

Post on 12-Oct-2015

54 views

Category:

Documents


3 download

TRANSCRIPT

  • UNIVERSIDAD NACIONAL MAYOR DE

    SAN MARCOS

    (Universidad del Per, DECANA DE AMRICA)

    LENGUAJES Y TRADUCTORES INFORME N1

    PROFESOR : JAIME PARIONA

    INTEGRANTES:

    Espinoza Benavides Cesar Augusto 08200096

    Soria Linares, Hctor J. 10200230

    Ciudad Universitaria, Junio 2013

  • U.N.M.S.M

    INFORME DE LENGUAJES Y TRADUCTORES

    ELABORACION DE UN ANALIZADOR LEXICOGRAFICO Y SINTACTICO PARA UN

    LENGUAJE DEFINIDO USANDO LA HERRAMIENTA JAVACC

    TRADUCTOR

    Un traductor es un programa que toma como entrada un texto escrito en un lenguaje, llamado fuente, y da

    como salida otro texto en un lenguaje denominado objeto.

    Si el lenguaje fuente es un lenguaje de programacin de alto nivel y el objeto es un lenguaje de bajo nivel

    (ensamblador o cdigo de maquina), a dicho traductor se le denomina compilador.

    Un ensamblador es un compilador cuyo lenguaje fuente es el lenguaje ensamblador. Un intrprete no

    genera un programa equivalente, sino que toma una sentencia del programa fuente en un lenguaje de alto

    nivel y la traduce al cdigo equivalente y al mismo tiempo lo ejecuta.

    Una tarea frecuente en las aplicaciones de las computadoras es el desarrollo de programas de interfaces e

    intrpretes de comandos, que son ms pequeos que los compiladores pero utilizan las mismas tcnicas.

    En los traductores, en forma general, se deben seguir una serie de etapas que difieren muy poco con

    respecto a las etapas de un compilador; solo en la etapa de sntesis puede haber variaciones porque la

    traduccin final no siempre es hacia un bajo nivel.

    FASES Y ETAPAS DEL COMPILADOR

    En general todo compilador debe tener una etapa de anlisis y una de sntesis. La primera realiza toda la

    evolucin y verificacin del cdigo fuente y la sntesis es donde se realiza la traduccin final (Ver Figura

    1).

    En la fase de anlisis lxico se revisa o se examina el programa fuente como una cadena de izquierda a

    derecha y se generan los componentes lxicos o token a partir de una secuencia de caracteres que tenga

    un significado valido.

    Luego, en la fase de anlisis sintctico, recibe todos los componentes lxicos reconocidos en la etapa

    anterior y los agrupa en forma jerrquica a travs de la gramtica independiente del contexto (define si

    est bien escrito). Seguidamente, en la etapa de anlisis semntico, el compilador intenta detectar

    construcciones que tengan la estructura sintctica correcta pero que no tengan significado para la

    operacin implicada y por ltimo en la generacin de cdigo se toma el programa y se crea un cdigo

    intermedio que generalmente lo traen todos los compiladores.

    La fase de anlisis lxico se constituye en la fase de estudio necesaria para la construccin del analizador

    lexicogrfico en cuestin.

    Figura 1. Fases de un Compilador

    JAVACC (Java Compiler Compiler Meta Compilador en Java )

    Se trata de una herramienta que facilita la construccin de analizadores lxico y sintctico por el mtodo

    de las funciones recursivas, aunque permite una notacin muy relajada parecida a la BNF (abreviatura en

    ingls de Forma de Backus Naur). De esta manera, los analizadores generados utilizan la tcnica

    descendente a la hora de obtener el rbol sintctico.

    JavaCC integra en una misma herramienta al analizador lexicogrfico y al sintctico, y el cdigo que

    genera es independiente de cualquier biblioteca externa, lo que le confiere una interesante propiedad de

    independencia respecto al entorno.

    A grandes rasgos, sus principales caractersticas son las siguientes:

  • U.N.M.S.M

    INFORME DE LENGUAJES Y TRADUCTORES

    Las especificaciones lxicas y sintcticas se ubican en un solo archivo.

    Admite el uso de estados lxicos y la capacidad de agregar acciones lxicas incluyendo un

    bloque de cdigo Java para el identificador de un token.

    Incorpora distintos tipos de tokens: normales (TOKEN), especiales (SPECIAL_TOKEN),

    espaciadores (SKIP) y de continuacin (MORE). Ello facilita trabajar con especificaciones ms

    claras, a la vez que permite una mejor gestin de los mensajes de error y advertencia por parte de

    JavaCC en tiempo de metacompilacin.

    La especificacin lxica puede definir tokens de manera tal que no se diferencien las maysculas

    de las minsculas bien a nivel global, bien en un patrn concreto.

    Tambin es considerado altamente eficiente, lo que lo hace apto para entornos profesionales y lo

    ha convertido en uno de los metacompiladores ms extendidos (quizs el que ms, por encima de

    JFlex/Cup).

    La estructura bsica de un programa en JavaCC es como se aprecia en la Figura 2.

    Figura 2. Estructura de un programa en JavaCC

    LENGUAJE PROPUESTO

    int a = 2 , b

    double c = 1

    complejo x (2 , 3) , y

    complejo r

    imprime x , y

    y = x + (4 , 3)

    x = x + y

    y = x * r

    if ( a > 1)

    imprime x

    endif

    while (c < 3)

    y = y + (2 , 4)

    imprime y

    wend

  • U.N.M.S.M

    INFORME DE LENGUAJES Y TRADUCTORES

    1

    4 3 2

    0

    8 7 6 5

    11

    9

    10

    13

    12

    25 24

    16 15

    14

    21 22

    18 17

    19 20

    23

    =

    $

    ,

    ,

    ,

    ,

    ,

    (

    (

    )

    )

    =

    +

    *

    $

    $

    $

    $ $ $

    $ ,

    ,

    imprime

  • U.N.M.S.M

    INFORME DE LENGUAJES Y TRADUCTORES

    GRAMATICA

    < decl>

    if else endif

    while wend

    ( )

    ,

    < id >

    < id > =

    complejo

    ,

    < id >

    < id > ( , )

    imprime

    < id >

    , < id >

    < id >

    +

    * < id >

  • U.N.M.S.M

    INFORME DE LENGUAJES Y TRADUCTORES

    0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

    < id >

    < id >

    int | float | double

    < | > | =

    < id >

    a | b | c .. | z

    ESTRUCTURA DEL PROGRAMA EN JAVACC

    Los programas en JavaCC siguen esta estructura general:

    options{

    ...

    }

    PARSER_BEGIN( Nombre )

    public class Nombre{

    ...

    ...

    }

    PARSER_END( Nombre )

    Produccin

    En la parte de options se colocan las opciones de JavaCC, es opcional, a partir

    de PARSER_BEGIN hasta PARSER_END es la declaracin del programa en Java, por

    ltimo, en la parte de produccin se colocan las Gramticas y Expresiones Regulares.

    PARSER_BEGIN (Complejos)

    // Aqu estar la clase main que va crear el objeto parser, ac tambin se ingresaran las lneas de

    sentencias y se ejecutara la clase programa definida en la gramtica.

    PARSER_END (Complejos)

    // Ac estarn las clases y las reglas de produccin definidas en la gramtica, Estarn clases

    para crear numero complejo, imprimir y las operaciones de suma y multiplicacin entre

    complejos, cada una con su regla de produccin respectiva.