词法分析器如何处理注释和转义序列?

Eon*_*nil 5 comments lex escaping lexical-analysis

注释和转义序列(例如字符串文字)在常规符号表示中非常特殊.

对我来说很难理解常规词法分析器如何标记它们.如何词法分析器像lex,flex或等.处理这种符号?有通用的方法吗?或者只是逐个案例的每种语言?

Ise*_*ria 1

我认为对于每种语言来说,这是事实。
如果注释起始符存在于字符串文字中,则词法分析器必须忽略它。类似地,在 C 中,如果\"字符串文字中存在转义双引号,则词法分析器必须忽略它。
为此,flex 具有启动条件。这使得上下文分析成为可能。
例如,flex texinfo手册中有一个C注释分析( /*and之间)的例子:*/

<INITIAL>"/*"   BEGIN(IN_COMMENT);
<IN_COMMENT>{
"*/"            BEGIN(INITIAL);
[^*\n]+         /* eat comment in chunks */
"*"             /* eat the lone star */
\n              yylineno++;
}
Run Code Online (Sandbox Code Playgroud)

开始条件还可以进行字符串文字分析。项目Start Conditions中有一个如何使用开始条件匹配 C 风格引用字符串的示例,还有标题为“ 如何在 C 风格引用字符串中扩展反斜杠转义序列?”的常见问题解答项目。 在flex texinfo手册中。
也许这会直接回答您关于字符串文字的问题。