¿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?¿Cuál es el carácter Magic Behind Escape ()
Respuesta
La mayoría de los compiladores se dividen en partes: el front-end del compilador se llama lexical analyzer o un escáner. Esta parte del compilador lee los caracteres reales y crea tokens. Tiene una máquina de estado 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 emite en consecuencia 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 (the parser). La máquina de estado puede agrupar varios caracteres en un token.
el carácter de escape con un carácter siguiente (como \n
) es un carácter único para el compilador C; el escáner lo presenta al analizador como token de carácter, por lo que no hay necesidad de reglas de sintaxis especiales en el analizador para el carácter de escape.
Por lo general, se escapa el siguiente carácter:
- En una cadena literal o carácter literal, significa escapar el siguiente carácter.
\a
significa 'alerta' (parpadeando el terminal, pitido o lo que sea),\n
significa 'avance 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 en toda la línea!), Actúa como una continuación de línea: se ignora el siguiente carácter de línea nueva, y la siguiente línea se fusiona con la línea actual.
No olvide \ uXXXX y \ UXXXXXXXX en C99. –
\ NNN (donde N son los dígitos 0-7) representa un número de byte en Octal. \ 0, comúnmente conocido como Null-Terminator, es realmente lo mismo que \ 000. Creo que 255 es \ 377 – abelenky
Aaron, eso es correcto. hay otros usos de \ también. pensé que haría una lista de las más importantes (por medición subjetiva). –
Una nota interesante sobre este tema es On Trusting Trust [PDF link].
El documento describe una forma en que un compilador puede manejar este problema exactamente, muestra cómo el compilador c-written-in-c no tiene una traducción explícita de los códigos en 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.
Ese es un artículo muy interesante que no había leído en mucho tiempo. Me olvidé de la sección sobre cómo ajustar un compilador para entender una nueva secuencia de caracteres de escape como '\ v', por lo que no pude ver su relevancia inmediatamente. Me alegro de haberlo verificado. –
Awesome paper dmckee. gracias por compartir. – mahesh
- 1. ¿Cuál es el carácter de escape para SSIS Expression Builder?
- 2. ¿Qué es el carácter de escape de Bash "\ c"?
- 3. ¿Cuál es la mejor estrategia de carácter de escape para el combo Python/MySQL?
- 4. carácter de escape en el comando vim
- 5. ¿Qué es el carácter Escape para el archivo de fragmento de SQL
- 6. ¿Cuál es la lógica para permitir que `?` Se escape?
- 7. ¿cuál es la secuencia de escape para guión (-) en PostgreSQL
- 8. ¿Cuál es el mejor algoritmo para el delimitador arbitrario/procesamiento de caracteres de escape?
- 9. Carácter de escape en SQL Server
- 10. Escape JSP EL utilizando etiquetas JSTL (carácter de punto)
- 11. Crear carbón de char * que incluye el carácter de escape
- 12. Javascript - Reemplazar el carácter de escape en una cadena literal
- 13. ¿Cómo hacer que javascript ignore el carácter de escape (\)?
- 14. ¿Cuál es el literal de carácter nulo en TSQL?
- 15. ¿Cuál es el carácter de lupa de índice UITableView?
- 16. Compilador Magic: ¿Por qué?
- 17. Magic Square Program (C++)
- 18. Apple Magic Mouse Api
- 19. Math behind Bump (ing)?
- 20. C# Magic Wand Tool
- 21. ¿Cómo funciona el magic% paste de IPython?
- 22. Reglas para literales de cadenas C++ carácter de escape
- 23. Oracle PL-SQL carácter de escape (para un " ' ")
- 24. Carácter de escape en MENOS CSS inserta espacios no deseados
- 25. Tab Escape Character?
- 26. iPhone - Localizable.strings con comillas dobles carácter de escape
- 27. Carácter de comillas de escape de T-SQL
- 28. ¿Qué es el carácter 0x1f?
- 29. ¿Cómo funciona Scala's apply() magic?
- 30. ¿Cómo usar Regex look behind?
al menos intente deletrear correctamente sus etiquetas creadas ... – Gilles
disculpe por eso, la pregunta fue escrita a toda prisa – mahesh
Este personaje (?) Falta en sus preguntas. ¿Cuál es la prisa, sin embargo? –