【发布时间】:2021-11-05 03:52:28
【问题描述】:
我正在为编译器编写扫描程序,并且有一个功能可以在看到 cmets 时跳过它们,我想知道如何以递归方式跳过嵌套的 cmets,即“hello”w“world”之类的东西,到目前为止我有类似的东西:
while ( current_char != '#' ){ // comments in this language starts with $# and end with #$)
next_char(); // gets the next character in our file
}
【问题讨论】:
-
" hello "w" world"是如何嵌套评论的? -
请注意,在 C 中,没有嵌套的 cmets。
/* This is /* not a nested */ comment */不是嵌套评论。这是一条注释,后面跟着一个语法错误。 -
这不是一个简单的练习,因此匹配引号也是必不可少的(并且“转义”引号是字符串的一部分,而不是分隔符),因为字符串中的注释标记可能不是实际的 cmets .维护一堆嵌套。
-
简单的解决方案:识别
/*和*/并维护一个计数器。其他解决方案:递归下降,或显式堆栈(状态)
标签: c recursion compiler-construction lexical-analysis