Estoy aprendiendo cómo construir analizadores usando gramáticas, pero me quedé atrapado tratando de expresar comentarios, porque pueden aparecer en casi cualquier lugar.
Esto indica que los comentarios se pueden quitar de la secuencia de tokens antes de que se realice el análisis.
¿Es esa la práctica estándar, o los comentarios se especifican alguna vez en las gramáticas?
Respuestas:
Es muy común tratarlo como una forma de espacio en blanco. De la misma manera que las nuevas líneas en lenguajes de punto y coma como C.
Una vez que se trata de algún tipo de espacio en blanco, con frecuencia simplemente lo ignora más arriba en el analizador.
fuente
Por lo general no lo son.
El lexer los elimina cuando el código fuente se transforma de caracteres a tokens.
Luego, el analizador obtendrá tokens y creará un AST. Cuando el analizador hace su trabajo, los comentarios ya no están, por lo que no tienen que aparecer en la gramática.
fuente
Respuesta corta rápida
Sí, es la práctica estándar, detectar comentarios en el "lexer" o el "analizador"
A veces, el "analizador" tiene un "lexer" incorporado o se mezcla con el "analizador" como una herramienta única ("analizador-lexer").
Respuesta Extendida
Solo estoy trabajando en ese caso.
La mayoría de los "escáneres" (también conocidos como "tokenizadores" o "lexers") detectan comentarios, pero se eliminan al devolver los tokens al "analizador".
A veces, un lenguaje de programación utiliza algunos comentarios con un significado especial, como "directivas del compilador" o "documentación".
Ejemplo de comentario estándar:
Ejemplo de comentario directivo:
Comentario para el generador de documentación Ejemplo:
La mayoría de las herramientas relacionadas con el compilador detectan estos comentarios especiales, con un analizador o un preprocesador, que no es el principal lezxer o analizador, e incluso tiene un pequeño lexer propio.
Salud.
fuente
Algunos analizadores que retienen comentarios y / o entradas ilegales en el AST los agregan como propiedades a todos los nodos del AST.
Podrías echar un vistazo al proyecto de Microsoft Roslyn que hace eso si recuerdo correctamente.
fuente