Pregunta

¿Cómo manipula el compilador C / C ++ el carácter de escape [" \ "] en el código fuente? ¿Cómo se escribe la gramática del compilador para procesar ese personaje? ¿Qué hace el compilador después de encontrar ese personaje?

¿Fue útil?

Solución

La mayoría de los compiladores se dividen en partes: el front-end del compilador se denomina analizador léxico o un escáner. Esta parte del compilador lee los caracteres reales y crea tokens. Tiene una máquina de estados que decide, al ver un carácter de escape, si es genuino (por ejemplo, cuando aparece dentro de una cadena) o si modifica el siguiente carácter. El token se envía como el carácter de escape o algún otro token (como una pestaña o una nueva línea) a la siguiente parte del compilador ( el analizador ). La máquina de estados puede agrupar varios caracteres en un token.

Otros consejos

Una nota interesante sobre este tema es On Confiar en la confianza [enlace PDF] .

El documento describe una forma en que un compilador podría manejar este problema exactamente, muestra cómo el compilador c-escrito-en-c no tiene una traducción explícita de los códigos a valores ASCII; y cómo iniciar un nuevo código de escape en el compilador para que la comprensión del valor ASCII para el nuevo código también esté implícita.

Generalmente escapa al siguiente carácter:

  • En un literal de cadena o literal de caracteres, significa escapar del siguiente carácter. \ a significa 'alerta' (parpadeo del terminal, pitido o lo que sea), \ n significa 'salto de línea', \ xNUM significa un número hexadecimal por ejemplo.
  • Si aparece como el último carácter visible antes de una nueva línea, ya sea dentro de una cadena o no (¡e incluso dentro de un comentario de toda la línea!), actúa como una continuación de línea: el siguiente carácter de nueva línea se ignora y el la siguiente línea se fusiona con la línea actual.
El

carácter de escape con el siguiente carácter (como \ n ) es un solo carácter para el compilador de C: el escáner lo presenta al analizador como token de caracteres, por lo que no hay necesidad de reglas de sintaxis especiales en el analizador para personaje de escape.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top