Está en la página 1de 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).













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


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




*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 $lexer->from(\*DATA);
28 print "Tokenization of DATA:\n";
29
30 TOKEN:while (1) {
31 $token = $lexer->next;
32 if (not $lexer->eoi) {
33 print "Record number: ", $lexer->line, "\n";
34 print "Type: ", $token->name, "\t";
35 print "Content:->", $token->text, "<-\n";
36 } else {
37 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.

También podría gustarte