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
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.
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.
- 1. ¿Es el mango lo mismo que un puntero inteligente?
- 2. ¿No es 00.0 lo mismo que 0.0?
- 3. Diseño del compilador y clase de construcción
- 4. puntero NULL es lo mismo que desasignarlo?
- 5. ¿Es LinqToSQL lo mismo que Linq?
- 6. ¿Es "extend self" lo mismo que "module_function"?
- 7. ¿DbContext es lo mismo que DataContext?
- 8. ¿Es '<? =' Lo mismo que 'eco'?
- 9. ¿Es dp lo mismo que dip?
- 10. ¿Es 'yield self' lo mismo que instance_eval?
- 11. ¿Currying es lo mismo que sobrecargar?
- 12. YARD no es lo mismo que RDoc?
- 13. ¿Corba es lo mismo que SOA?
- 14. ¿Es AppendHeader exactamente lo mismo que AddHeader?
- 15. es StringComparison.Ordinal lo mismo que InvariantCulture para probar la igualdad?
- 16. ¿Es la palabra clave 'Is' VB.NET lo mismo que Object.ReferenceEquals?
- 17. Encoding.Default no es lo mismo que ninguna codificación en File.ReadAllText?
- 18. es si (variable) lo mismo que si en Objective-C
- 19. ¿Hacer zoom en el navegador es lo mismo que hacer zoom en un dispositivo móvil?
- 20. ¿Es OpenJDK JVM lo mismo que Oracle Java SE JVM?
- 21. JPA: es @PrimaryKeyJoinColumn (...) lo mismo que @JoinColumn (..., insertable =?, Updatable =?)?
- 22. es SSIS inserción masiva lo mismo que una inserción masiva
- 23. ¿Es una línea en un programa Java lo mismo que una instrucción?
- 24. ¿Es Java 1.6 lo mismo que JDK 6?
- 25. ¿Calloc (4, 6) es lo mismo que calloc (6, 4)?
- 26. lo que es la "corriente" en linux fuente del núcleo
- 27. ¿Por qué es más difícil construir un compilador cruzado que compilar un compilador común?
- 28. Escribir un compilador; que VM?
- 29. ¿Es "2D fft" lo mismo que dos 1D fft?
- 30. ¿Es esto un error del compilador o es mi código?
muchas gracias por esta gran respuesta! De alguna manera confundí el nombre de la tabla de símbolos ;-) –
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
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