【发布时间】:2017-03-25 23:23:38
【问题描述】:
【问题讨论】:
-
请将您的代码作为文本发布在问题中。
-
大部分部分消失,因为它包含很多 \\\\
-
这是用于创建 Tokens 的简单 Lex 代码。
-
可靠地处理 cmets 非常困难。理论上,您需要了解三元组(因为
??/映射到反斜杠),但是像 GCC 这样的编译器默认会忽略它们,而 C++17 会消除它们。您还需要了解反斜杠换行规则;这些很重要,因为如果每行的最后一个字符是反斜杠,//cmets 可以继续到后续行。开始和结束注释符号也可以被反斜杠换行符打破。大多数情况下,您不会遇到这种深奥格式的 cmets,但编译器必须将它们全部考虑在内。 -
this answer 中有一个 flex 正则表达式,但@JonathanLeffler 的评论也是正确的;这取决于您在将输入输入到词法分析器之前是否处理过三元组和 \-newline 序列。
标签: c compiler-construction lex analyzer lexical