我需要解析一些c ++文件以获取一些信息。一个用户案例是我有一个枚举值“ID_XYZ”,我想知道它在源文件中出现的次数。所以我的问题是C ++中的分隔符是什么?
答案 0 :(得分:2)
您无法真正基于分隔符字符对C或C ++源代码进行标记 - 您几乎需要一次读取一个字符,并确定该字符是否可以成为当前令牌的一部分。
仅举几个例子,当您看到C风格的开始 - 评论标记时,您需要查看字符,直到遇到关闭注释标记。同样,字符串和预处理器指令(例如,#if 0 .... #endif
序列)。要真正做到这一点,你还需要正确处理三字符。例如,考虑这样的事情:
// Why doesn't this work??/
ID_XYZ = 1;
如果词法分析器没有正确处理三字符,它可能会将其识别为ID_XYZ
的一个实例 - 但实际上,它不是 - ??/
在前一个结尾处line实际上是解析为\
的三字符,这意味着“单行”注释实际上延伸到 next 行的末尾,以及ID_XYZ
的明显实例实际上是评论的一部分。