Token

Instituto Politécnico Nacional Escuela Superior De Ingeniería Mecánica Y Eléctrica Unidad Culhuacán. Ingeniería En Comp

Views 183 Downloads 44 File size 466KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Instituto Politécnico Nacional Escuela Superior De Ingeniería Mecánica Y Eléctrica Unidad Culhuacán.

Ingeniería En Computación

Materia: Compiladores

Tema: Tokens Proyecto

Profesora: Rodríguez Moreno Iovanna Alumnos: Hernández Suarez Gabriel Soto Pérez José Morales López Waldo Grupo: 5CX32

 INTRODUCCION TOKENS Y LEXEMAS token: “es un par que consiste en un nombre de token y un valor de atributo opcional. El nombre del token es un símbolo abstracto que representa un tipo de unidad léxica; por ejemplo, una palabra clave específica o una secuencia de caracteres de entrada que denotan un identificador. Los nombres de los tokens son los símbolos de entrada que procesa el analizador sintáctico” (Aho, Lam, Sethi, & Ullman, 2008) Lexema: “es una secuencia de caracteres en el programa fuente, que coinciden con el patrón para un token y que el analizador léxico identifica como una instancia de ese token.”(Aho, Lam, Sethi, & Ullman, 2008). Para cada lexema, el analizador léxico produce como salida un token de la forma: 〈nombreToken,valorAributo〉 En el token, el primer componente nombreToken es un símbolo abstracto que se utiliza durante el análisis sintáctico, y el siguiente componente valorAtributo apunta a una entrada en la tabla de símbolos. La entrada a la tabla de símbolos se necesita más tarde en el analizador semántico y generador de código; supongamos que el analizador léxico encuentra dos tokens de la forma identificador, para los conjuntos de caracteres suma y resta, para esta etapa de reconocimiento bastará con dicha información; pero el generador de código necesita saber la posición y uso de éstos identificadores en el programa fuente. Para entender la forma en que el analizador léxico realiza esta identificación de lexemas se propone la siguiente instrucción: Velocidad=distancia / tiempo TABLA DE SÍMBOLOS Las tablas de símbolos “son estructuras de datos que utilizan los compiladores para guardar información acerca de las construcciones de un programa fuente” (Aho, Lam, Sethi, & Ullman, 2008) Como se ha mencionado con anterioridad, la tabla de símbolos almacena de forma volátil los lexemas encontrados en el programa fuente y la información adicional necesaria para la generación de código, como su cadena de caracteres (lexema), su tipo, su posición en el espacio de almacenamiento, y cualquier otra información relevante. Por lo general una tabla de símbolos debe soportar varias declaraciones del mismo identificador dentro del programa.

EXPRESIONES REGULARES La especificación de un lenguaje de programación incluye a menudo un conjunto de reglas que define el léxico. Estas normas se denominan expresiones regulares y definen el conjunto de posibles secuencias de caracteres que se utilizan para formar fichas o lexemas Cada expresión regular denota un lenguaje. Para definir “las expresiones regulares (ER) sobre un vocabulario V, se utilizan las siguientes reglas ε es una ER que denota {ε} Para cada perteneciente a V, a es la ER que denota {a} Si p y q son dos ER que denotan los lenguajes P y Q respectivamente, entonces: a.(p)|(q)es una ER que denota P∪Qb.(p)∙(q)es una ER que denota P∙Qc.(p)*es una ER que denotaP*” (Valverde Andreu, 1989). DEFINICIONES REGULARES Para facilitar la creación de todas las expresiones que conformarán un analizador léxico, es conveniente poner nombres a ciertas expresiones regulares y utilizarlos en otras expresiones. Lo anterior se denomina definición regular. En la creación de un lenguaje de programación se tiene que identificar las cadenas de letras, dígitos y símbolos de operación, un ejemplo que representa esta definición es:

AUTÓMATAS FINITOS

Una forma de generar un analizador léxico a partir de las definiciones regulares que modelan el lenguaje es con el uso de autómatas finitos, en esencia, éstos consisten en grafos como los diagramas de transición de estados, con las siguientes características: -Los autómatas finitos son reconocedores, es decir, solo pueden representar cierto o falso en relación con cada posible cadena de entrada, esto se representa por la transición que lleva de un estado a otro. -Los autómatas finitos pueden ser de dos tipos:  Los autómatas finitos no deterministas (AFN) no tiene restricciones en cuanto al número de transiciones de estados.  Los autómatas finitos deterministas (AFD) tienen para cada estado, y para cada símbolo del alfabeto de entrada, exactamente una línea con ese símbolo que sale de ese estado. Tanto los autómatas finitos deterministas como no deterministas son capaces de reconocer los mismos lenguajes, mejor conocidos como lenguajes regulares

 Lista de tokens

 Token

Lexema

Patrón

Identificador

a...z, A...Z, 0...9

Numero

1,2,3,40

Enteros

0,1,2,3,4….,9

Reales con exponente Reales sin exponente If Case

0…9….,E,e,+,-

goto

goto

break

break

for

for

Int

Int

Do Doublé

Do Double

else

else

Char

Char

float

float

Null

Null

Return

Return

Public

Public

Letra seguida de letra o digito Digito seguido de mas dígitos Dígitos seguidos de mas dígitos Dígitos y exponentes seguidos de mas dígitos Dieguitos seguidos de dígitos Letra i seguida de f Letra c seguida de a seguida de s seguida de e Letra g seguida de o seguida de t seguida de o Letra b seguida de r seguida de e seguida de a seguida de k Letra f seguida de o seguida de r Letra i deguida de n desuida de t Letra d seguida de o Letra d seguida de o seguida de u seguida de b seguida de l seguida e Letra e seguida de l seguida s seguida de e Letra c seguida de h seguida de a seguida de r Letra f seguida de l seguida de o seguida de a seguida de t Letra n seguida de u seguida de l seguida de l Letra r seguida de e seguida de t seguida de u seguida de r seguida de n Letra p seguida de u

0,1,2,3,4….,9 If case

Reservad a No No No No No Si Si Si Si

Si Si Si Si

Si Si Si

Si Si

Si

string

string

Struct

Struct

Switch

Switch

True

True

typeof

typeof

Void

Void

while

while

namespace Operación asignada Operación división Operación suma Operación multiplicación Operación resta Dos puntos Corchete abierto Corchete cerrado Mayor Menor Menor igual Coma Punto y coma Mayor igual Diferente Punto Paréntesis abierto Paréntesis cerrado

namespace =

seguida de b seguida de l seguida de i seguida de c Letra s seguida de t seguida de r seguida de i seguida de n seguida de g Letra s seguida de t seguida de r seguida de u seguida de c seguida de t Letra s seguida de w seguida de i seguida de t seguida de c seguida de h Letra t seguida de r seguida de u seguida de e Letra t seguida de y seguida de p seguida de e seguida de o seguida de f Letra v seguida de o seguida de i seguida de d Letra w seguida de h seguida de i seguida de l seguida de e Letra Simbolo =

/ + *

Simbolo= Simbolo+ Símbolo*

Si Si Si

: [ ] > < =

. ( )

Simbolo Simbolo : Simbolo [ Simbolo ] Simbolo > Simbolo < Simbolo = Simbolo Simbolo . Simbolo ( Simbolo )

Si Si Si Si Si Si Si Si Si Si Si Si Si Si

Si

Si

Si

Si Si

Si Si

Si Si

Llaves abiertas Llaves cerradas Diagonal Comentarios Cadena de texto COMENTARIOS:

{ } \ [,OC,] [,OC,]

Simbolo { Simbolo } Simbolo \ Simbolo [,OC,] Simbolo [,OC,]

Si Si Si Si Si

En la Cadena de Texto no se permite el EOF, ni el salto de Línea. En Comentario no puede haber fin de archivo. Operadores Aritméticos: suma, resta, multiplicación y división. Operador relaciona: es el igual, en C es = =. Operador Lógico: Y, O, NO.

 Lista de expresiones regulares. Expresiones . [abc]

[abc][12] [] {2} {1,2} () [a-z1-9] AlB AB \d \D \S

Descripción Un ponto indica cualquier carácter Los corchetes representan una definición de conjunto. Este por ejemplo debe contener las letras a o b o c Debe contener las letras a ó b ó c seguidas de 1ó2 Los corchetes indican la negación. Define el número de veces que aparecerá el carácter sustituido Define el número de veces que aparecerá el carácter sustituido Define a los caracteres corchetes como referencia. No debe contener los dígitos desde 1 al 9 El carácter l es un OR. A ó B Concatenación de A seguida de B Digito equivalente [o-9] No hay digito equivalente Una letra mayúscula minúscula, digito o carácter

\w \b \t \ \n {x} {x,y} * + [-] {n.m} {n} < > [0123456789] [0-9] [A-Za-z] (ab)*

Equivalente a [\w Límite de una palabra Encuentra un tabulador Encuentra el carácter ( no los números) especificados. Salto de línea forzado Indica lo que va dentro de x Indica lo que va dentro de las llaves tanto de x como de y Indica el producto de dos dígitos o palabras Indica una suma de dígitos Indica una resta de dígitos Cualquier carácter individual incluido el intervalo De n a m apariciones del carácter o la expresión anterior Exactamente n apariciones del carácter o la expresión anterior El principio de una palabra El final de una palabra 0123456789 0123456789 ABC…Zabc….z Cadena vacia

 Definición Regular. Hernández Suarez Gabriel.

Vocales---A l E l I l O l U l a l e l i l o l u Abecedario----- A l B l C l D l E l……l Z l a l b l c l d l e l……l z Digito----0 l 1 l 2 l 3 l 4 l 5 l 6 l 7 l 8 l 9 Identificador----letra (letra l digito) {a,b}-----a l b {€,b}-----€ l b

{a,b,c,d}------(a l b) l (c l d) = a l b l c l d {€,b,bb,bbb,bbbb}-------b* Simbolos------ + l – l * l / l < l > l { l } l =