Anda di halaman 1dari 35

En un compilador, el anlisis lineal se llama anlisis lineal o exploracin.

Por anlisis lineal entendemos la cadena de caracteres que constituye el programa fuente se lee de izquierda a derecha y se agrupan en componentes lxicos, que son secuencias de caracteres que tiene un significado colectivo. Por ejemplo, en anlisis lxico los caracteres de las siguientes proposiciones de asignacin

Los espacios en blanco (delimitadores) que separan los caracteres de estos componentes lxicos normalmente se eliminan durante el anlisis lxico.

Una expresin regular denota un conjunto de secuencias de smbolos vlidas que se construyen en base al alfabeto de un lenguaje. Generalmente estos conjuntos se representan como:

Es una expresin regular que denota el conjunto vaco (el conjunto no contiene secuencias de smbolos).

Es una expresin regular que denota al conjunto que contiene la secuencia vaca.

Una secuencia de smbolos S es una expresin regular que denota a un conjunto que contiene a S. Operaciones sobre Lenguajes

*Son una notacin para definir lenguajes

*Se ha demostrado que pueden expresar la clase de los lenguajes regulares * Permiten hacer una definicin algebraica de un lenguaje
* Se expresa el lenguaje de manera declarativa

Dadas dos expresiones regulares E1, E2, el resultado de aplicar cualquiera de estas tres operaciones, da como resultado otra expresin regular:
*Unin (E1 E2) = {x | x E1 ox E2 o x E1 E2}. *Concatenacin E1 E2 = {xy | x E1, y E2} *Clausura o Estrella de Kleene (E1* ) = i>=E1i

Construir una expresin regular es realizar operaciones sobre el alfabeto de un lenguaje. Podemos decir que el lenguaje, en su aspecto de lxico, est conformado por las operaciones Unin de L y M. LUM = { S | S est en L S est en M } Concatenacin de L y M. LM = { st | s est en L y t est en M}

Cerradura Kleene.

(L se repite de 0 a infinito) Cerradura Positiva.

( L se repite de 1 a infinito).

Como se ve, las expresiones regulares son operaciones que se realizan sobre conjuntos de smbolos que pertenecen al alfabeto de un lenguaje. Estos conjuntos se describen colocando a los smbolos que pertenecen a ellos entre llaves. Por ejemplo, los caracteres que ubicamos como letras podran conformar el conjunto

{ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijkl mnopqrstuvwxyz}

Si los elementos del conjunto tienen un orden conocido o asociado al cdigo ASCII se puede describir colocando el primer smbolo y el ltimo separados por un guin (-) como {A-Z a-z} Para hacer ms simple la construccin de una expresin regular, se designa bajo un nombre al conjunto con el cual se trabajar. as el conjunto letra se puede describir como L = {A-Z a-z}

Cuando a un conjunto o a una expresin regular se le da un nombre, sta recibe el nombre de definicin regular. As, la expresin regular para un identificador ser: ID=L (L | D | G) * si las definiciones sobre las cuales est construida son: L= {A-Z a-z} D = {0123456789} G = {_}

Por ejemplo, en Ada los identificadores estn formados por letras, dgitos o guiones, pero el guin no puede ser el ltimo caracter. La expresin regular con la cual se puede conformar el patrn para esta unidad de lxico puede ser: ID_ada = L (L | D) * (G (L | D ) + ) * Una expresin regular es un mtodo formal para describir un patrn y puede ser empleada para construir un analizador lxico que lo reconozca en una computadora. De hecho, la expresin sufre una serie de transformaciones para llegar a ser explotada como tabla:

Expresin Regular se convierte en Autmata Finito No deterministico (NFA) se convierte en Autmata Finito Deterministico (DFA)
que se representa como Tabla

Un autmata finito es un conjunto de nodos y aristas que representan trayectorias para generar una expresin bajo un alfabeto. Un diagrama de transicin es un autmata finito. Los autmatas finitos se clasifican en: * Autmatas finitos no determinsticos. NFA *Autmatas finitos determinsticos. DFA

Un NFA esa un modelo matemtico que consiste de: 1.- Un conjunto de estados. 2.- Un conjunto de smbolos de entrada. 3.- Una funcin de transicin que corresponde pares estado-smbolo a conjuntos de estados. 4.- Un estado So que denota como el estado inicial. 5.- Un conjunto de estados F que denotan los estados de aceptacin o finales. Un NFA no tiene restricciones para que exista mas de una transicin con el mismo nombre a diferentes estados

por lo que en una representacin tabular no es posible determinar de manera nica el estado destino para un smbolo determinado. Por ejemplo, el siguiente diagrama representa la expresin (a | b)* a b b

Un DFA es un caso especial de NFA en el que ningn estado tiene transiciones para diversos estados bajo el mismo smbolo y no se permiten transiciones psilon. Los diagramas de transicin son autmatas determinsticos. Por ejemplo, el DFA de (a | b)* a b b puede ser:

que podra ser muy aproximado al diagrama de transicin que construiramos para la expresin.

La expresin regular del autmata es: a*b*. Existen muchas equivalencias con respecto a expresiones regulares basadas en las correspondientes igualdades de lenguajes. Por ejemplo sean r, s y t expresiones regulares sobre el mismo alfabeto S . Entonces: 1. (rs)t = r(st) 2. r + s = s + r 3. (r + s)t = rt + st 4. (r*)* = r* 5. r(s + t) = rs + rt

Para la implementacin de la tabla de smbolos, nos hemos ayudado de la librera STL. Hemos hecho uso del contenedor STL_HASHMAP. El acceso se realiza aplicando una funcin hash sobre el char * del identificador del smbolo. Para mayor legibilidad y facilidad, hemos implementado la clase c_tabla_simbolos. Realiza las operaciones que necesitamos, y se las implementa haciendo uso del citado contenedor hash.

Debido a que necesitaremos ms de una tabla en determinados momentos, y a su vez, una jerarqua entre las tablas, hemos implementado tambin la clase c_almacen_tablas. Dicha clase hace uso del contenedor STL_STACK. A continuacin se muestran los diagramas de las clases implementadas en notacin UML.

El mtodo show de la clase c_tabla_simbolos sirve para llamar a los mtodos show de cada smbolo almacenado. De esa manera se realiza el volcado pedido. En cuanto a la clase c_almacen_tablas, hemos implementado las operaciones avanzar, retroceder y enderezar. Sirven para poder movernos dentro de la pila sin perder elementos. Esto significa, que en un momento dado, podemos ejecutar avanzar sobre la pila, y la cima pasa a ser la tabla de smbolos previa.

Hemos supuesto que esto puede ser provechoso para las operaciones en las que haya que buscar si un smbolo se encuentra en la tabla de smbolos actual o en cualquiera de las tablas previas de la jerarqua. Al utilizar internamente dos pilas, una llamada posterior a retroceder dejara la pila en su situacin original. Enderezar se utiliza para regresar la pila a su posicin original desde cualquier posicin.

La clase Parse::Lex nos permite crear un analizador lxico. La estrategia seguida es mover el puntero de bsqueda dentro de la cadena a analizar utilizando conjuntamente el operador pos() y el ancla \G. > cat -n tokenizer.pl 1 #!/usr/local/bin/perl 2 3 require 5.004; 4 #BEGIN { unshift @INC, "../lib"; } 5 6 $^W = 0; 7 use Parse::Lex; 8 print STDERR "Version $Parse::ALex::VERSION\n";

9 10 @token = ( 11 qw( 12 ADDOP [-+] 13 LEFTP [\(] 14 RIGHTP [\)] 15 INTEGER [1-9][0-9]* 16 NEWLINE \n 17 ), 18 qw(STRING), [qw(" (?:[^"]+|"")* ")], 19 qw(ERROR .*), sub {

20 die qq!can\'t analyze: "$_[1]"\n!; 21 } 22 ); 23 24 Parse::Lex->trace; 25 $lexer = Parse::Lex->new(@token); 26 27 $lexer->from(\*DATA);

27 28 29 30 31 32 33 34 35 36 37

$lexer->from(\*DATA); print "Tokenization of DATA:\n"; TOKEN:while (1) { $token = $lexer->next; if (not $lexer->eoi) { print "Record number: ", $lexer->line, "\n"; print "Type: ", $token->name, "\t"; print "Content:->", $token->text, "<-\n"; } else { last TOKEN;

38 } 39 } 40 41 __END__ 42 1+2-5 43 "This is a multiline 44 string with an embedded "" in it" 45 this is an invalid string with a "" in it"

Entrada: function main(){ /* Otra prueba mas ! */ var a = 3 // var b = 2 /* a debera estar en la tabla de smbolos, b no ! */ var i var v = new Array (101) for (i=0; i<100; i+=5){ v[i]=i; }

for (i=0; i<100; i+=5){ document.write(v[i], " "); } document.write("\n"); }


main(); // Fin de la prueba Salida: Leyendo del fichero 'prueba10'

ANA RAQUEL GARCIA FALLA

YUDY MERCEDES LOSADA ROMERO

*En que se clasifica las expresiones autnomas finitas? * Cual es la funcionalidad de las expresiones regulares?

* El lenguaje en su aspecto lxico esta compuesto de que operaciones y de ejemplo de cada una de ellas.

Anda mungkin juga menyukai