Free Web Hosting Provider - Web Hosting - E-commerce - High Speed Internet - Free Web Page
Search the Web

escudo.jpg (17355 bytes)

MUSICA MIENTRAS NAVEGAS CON REAL AUDIO

sacanimado.GIF (139839 bytes)

552 PERSONAS QUE NOS VISITAN

iconobusca.gif (415 bytes)

STRINGS,ALFABETOS Y LENGUAJES

Un Símbolo es una entidad abstracta que no necesitamos definir formalmente, como por ejemplo una letra del alfabeto o un dígito.

Alfabeto : Cualquier conjunto finito de símbolos. Se designa por S.

String (cadena, palabra) : es una secuencia finita de símbolos yuxtapuestos.
Por ejemplo:

,b,c Símbolos
Abbca String

If (a=b) or (b=c) then i:=i+1; es una palabra PASCAL El tamaño de un String w denotado por |w| es el número de símbolos que componen el string.
Por ejemplo |abbca| = 5

El String vacío, denotado por e es el string que contiene 0 símbolos. Así |e|=0

Una cadena de "i" símbolos "a" se denota por ai
Por ejemplo:

a0 e
a1 a
a2 aa
a3 aaa
Etc...  

Definición. Se definen strings sobre un alfabeto S como:
a) e es un string sobre S
b) Si x es un string sobre S y a Î S entonces xa es un string sobre S
c) y es string sobre S ssi es obtenido mediante los pasos (a) y (b)
Substrings: Sean x,y,z, w = xyz strings arbitrarios sobre un alfabeto S. Se llama al string y (x,z) substring del string xyz.

Un Prefijo de un string es cualquier substring del comienzo de ese string; y un sufijo de un string es un substring del final de ese string.

Por ejemplo : El string abc tiene

Prefijos e,a,ab,abc
Sufijos e,c,bc,abc

Si el prefijo (sufijo) de un string es distinto del string mismo, el prefijo (sufijo) se denomina prefijo (sufijo) propio del string.

Observación: e es substring, prefijo y sufijo de cualquier string.

Concatenación de 2 strings es el string formado por yuxtaposición de strings escribiendo el primero seguido por el segundo sin espacios intermedios.

Por ejemplo: Sean x = abre, y = lata; entonces xy = abrelata que es distinto de yx = lataabre.
e es la identidad del operador de concatenación, luego: "x, ex = xe = x.

El reverso de un string x, denotado por xR ,es el string x escrito en orden inverso:

x xR
arroz zorra
radar radar
rio oir

Definición : Un lenguaje sobre un alfabeto S es un conjunto de strings sobre S.
Definición : S* denota al conjunto que contiene todos los strings sobre S, inclusive e.
Por ejemplo:
S = {0,1}
S* = {e,0,1,00,01,10,11,000,...}
Todo lenguaje L sobre S es un subconjunto de S*. Bajo concatenación (·) S* es un monoide (S*,·,e)

LEXEMAS, EXPRESIONES REGULARES Y TOKENS.

Para ver las diferencias entre los conceptos de lexema, expresión regular y token, veamos algunos ejemplos de ellos para la siguiente gramática: sent -> ID ASIG exp ';'exp -> exp '+' expexp -> exp '*' expexp -> NUMENTEROexp -> NUMREALexp -> IDENT

Token Lexema Expr. regular Expr. Reg. LEX
IDENT perimetro
radio
pi
hola
(a+...+z+_)(a+...+_+0+...+9)* [a-zA-Z_][a-zA-Z0-9_]
ASIG := := :=
NUMENTERO 47
123456789
0
(0+...+9)(0+...+9)* [0-9]+
PR_FOR for
For
FOR
(F+f)(O+o)(R+r) [Ff][Oo][Rr]

EXPRESIONES REGULARES EN LEX Lex es un generador de analizadores léxicos. Cada vez que Lex encuentra un lexema que viene definido por una expresión regular, se ejecutan las acciones (escritas en C) que van al lado de la definición de dicha expresión.

Lex crea code yylex /code, una variable que contendrá un número, el cual se corresponde con el token de cada expresión regular. También, instancia una variable global code yytext /code, que contiene el lexema que acaba de reconocer.

Así, por ejemplo, para el siguiente código fuente de entrada:

pre %% expresión1{acción1}expresión2{acción2}... ...expresiónn{acciónn}%%

Lex genera un programa en C (generalmente denominado lex.yy.c)

que incluye, entre otras, la función yylex():

int yylex(){ while(!eof()) { switch(...) { case -1: ... ; break;

Esta función recorre el texto de entrada. Al descubrir algún lexema que se corresponde con alguna expresión regular, construye el token, y realiza la acción corespondiente. Cuando se alcanza el fin de fichero, devolverá -1. La función yylex() podrá ser invocada desde cualquier lugar del programa.

Las expresiones regulares (ER, de aquí en adelante) han de aparecer en la primera columna.

Alfabeto de entrada: Caracteres ASCII al 127.

Concatenación: Sin carácter especial, se ponen los caracteres juntos.

Caracteres normales: Se representan a ellos mismos.

Caracteres especiales: Se les pone la barra '' delante. Éstos son:

* + ? | [ ] ( ) " \ . { } ^ $ / <>

Caracteres especiales dentro de los corchetes ( '[' y ']'):

- \ ^

Las equivalencias entre ER normales y las que se usan en Lex se muestran con ejemplos en esta tabla:

Caracteres Ejemplo Significado
Concatenación xy El patrón consiste en x seguido de y.
Unión code x|y /code El patrón consiste en code x /code o en code y /code.
Repetición code x* /code El patrón consiste en code x /code repetido cero a más veces.
Clases de caracteres code [0-9]/code Alternancia de caracteres en el rango indicado, en este caso code 0|1|2|...|9 /code.
Más de un rango se puede especificar, como por ejemplo: code [0-9A-Za-z] /code para caracteres alfanuméricos.
Operador negación code [^0-9] /code El primer carácter en una clase de caracteres deberá ser ^ para indicar el complemento del conjunto de caracteres especificado. Así, code [^0-9] /code especifica cualquier carácter que no sea un dígito.
Carácter arbitrario code . /code con un único carácter, excepto code \n /code .
Repetición única code x? /code Cero o una ocurrencia de code x /code .
Repetición no nula code x+ /code Una o más ocurrencias de code x /code.
Repetición especificada code x{n,m} /code code x /code repetido entre n y m veces.
Comienzo de línea code ^x /code Unifica code x /code sólo al comienzo de una línea
Fin de línea code x$ /code Unifica code x /code sólo al final de una línea
Sensibilidad al contexto (operador "look ahead") code ab/cd /code Unifica code ab /code, pero sólo seguido de code bc /code.
Cadenas de literales code "x" /code Cuando code x /code tenga un significado especial.
Caracteres literales code \x /code Cuando code x /code es un operador que se representa a él mismo. También para el caso de code \n /code , code \t /code , etc.
Definiciones code {nombrevar} /code Pueden definirse subpatrones. Esto significa incluir el patrón predefinido llamado code nombrevar /code .

Definiciones en Lex. La sección de definiciones permite predefinir cadenas que serán útiles en la sección de las reglas.

Por ejemplo: comentario "//".*limitador [ \t\n]espblanco {limitador}+letramay [A-Z]letramin

Cada regla está compuesta de un nombre que se define en la parte izquierda, y su definición se coloca en la derecha. Así, podemos definir code comentario /code como code // /code (con la barra puesto que es un carácter especial), seguido por un número arbitrario de caracteres excepto el de fin de línea. Un code limitador /code será un espacio, tabulador o fin de línea, y un code espblanco /code será uno o más limitadores. Nótese que la definición de code espblanco /code usa la definición anterior de code limitador /code .

Reglas para eliminar ambigüedades. Se producen cuando varias ER's son aplicables a un mismo lexema reconocido. Lex seleccionará siempre la ocurrencia más larga posible. Si dos ocurrencias tienen la misma longitud, tomará la primera.

Notas complementarias sobre Lex.

Cada vez que se realice una de las acciones, la variable code char *yytext contendrá el lexema reconocido.

La variable code int yyleng /code contiene la longitud del lexema reconocido.

Entrada y salida: code FILE *yyin, *yyout /code . Por defecto, se usan los predefinidos en C.

Cuando Lex reconoce el carácter de fin de fichero, llama a la función code int yywrap() /code , que por defecto devuelve code 1 /code . Si devuelve code 0 /code , significará que está disponible una entrada anterior, con lo cuál aún no se habrá terminado la lectura.

Contextos: Permiten especificar cúando se usarán ciertas reglas.

REGRESAR

CONTINUAR

SACBEOB TE REGALA ESTOS SERVICIOS

INFORMACION  PUBLICITARIA TUTORIALES SACBEOB LIGAS A OTROS TUTORIALES TU E-MAIL GRATIS CON SACBEOB CONOCE SACBEOB
CONOCE AL PERSONAL UVM BAJA PROGRAMAS PROGRAMAS COMUNIDAD ESTUDIANTIL LIGAS A PAGINAS PERSONALES SACBEOB|UVM|MEXICO
SACBEOB|UVM|EDO.MEXICO NOTICIAS DEPORTIVAS NOTICIAS CULTURALES EVENTOS-INFORMACION DE LA UVM MAESTRIAS

BOLSA DE TRABAJO

SOCIEDAD DE ALUMNOS DE SISTEMAS