2011-07-29 3 views
10

En la construcción de compiladores, cuando se habla de tokens, ¿es una ficha lo mismo que un símbolo/simplemente otro término para un símbolo? Después de algunas investigaciones, creo que para entender, que un token es un símbolo con una referencia a la tabla de símbolos, por lo tanto, algún tipo de símbolo/símbolo atribuido con algunas informaciones adicionales? Gracias por cualquier aclaración :-)En la construcción del compilador, ¿un símbolo es lo mismo que un token?

Respuesta

12

Un token no es necesariamente un símbolo en la tabla de símbolos. Por ejemplo, si un token es una palabra reservada, entonces no se ingresa en la tabla de símbolos. Si un token es un identificador, es probable que se ingrese en la tabla de símbolos.

Tomemos por ejemplo la siguiente declaración:

char s[100]; 

Un analizador léxico podría salida de los siguientes símbolos:

<"char", IDENTIFIER> 

dependiendo de la aplicación que podría ser reconocida como una palabra reservada o introducirse en la tabla de símbolos como un nombre de tipo predefinido (no estoy 100% seguro aquí),

<"s", IDENTIFIER> 

"s" se consignan en la tabla de símbolos como un identificador de variables,

<"[", OPEN_SQUARE_BRACKET> 

no aceptado en la tabla de símbolos,

<"100", INTEGER_LITERAL> 

no aceptado en la tabla de símbolos,

<"]", CLOSE_SQUARE_BRACKET> 

no aceptado en la tabla de símbolos,

<";", SEMI_COLON> 

no ingresado en la tabla de símbolos.

Por lo tanto, básicamente ingrese en la tabla de símbolos solo aquellos tokens que necesita referenciar más adelante durante el proceso de compilación. Por ejemplo, más adelante en el cuerpo de la función, cuando se encuentra

strcpy(s, "Hello, world\n"); 

que reconocen de nuevo el token < "s", identifier> y mirar hacia arriba en la tabla de símbolos. La tabla de símbolos dirá que "s" ha sido declarada como una variable de tipo char [].

Por lo tanto, yo diría que un token de es cualquier pedazo de entrada que es reconocido por el analizador léxico, y que sólo se han registrado ciertos símbolos con un significado especial como símbolos en la tabla de símbolos.

+0

muchas gracias por esta gran respuesta! De alguna manera confundí el nombre de la tabla de símbolos ;-) –

+0

Entonces, siguiendo desde arriba, ¿sería justo argumentar que todos los tokens ingresados ​​en la tabla de símbolos son, de hecho, solo identificadores? es decir, ¿qué tokens se pueden ingresar en la tabla de símbolos que no son identificadores? .. ¿Es la definición de un símbolo exactamente un identificador? (a diferencia de otros tokens [','; ',' 100 ', etc.] Estoy especulando, no tengo ni idea.) – wardw

+0

Por lo que yo sé, usted está en lo cierto: los únicos tokens que se ingresan en la tabla de símbolos son identificadores (de funciones, variables, etc.) (Ver también http://en.wikipedia.org/wiki/Symbol_table) – Giorgio

0

Un símbolo es la constante ENTREGADA EN ESA LLAVE como en S = S en esa tabla, o Pi = Pi en esa ecuación, mientras que una ficha representa lo dado como el medio de intercambio en esa condición.

Cuestiones relacionadas