有什么好的工具可以快速开始解析和分析C/C++代码?
特别是,我正在寻找处理C/C++预处理器和语言的开源工具.优选地,这些工具将使用lex/yacc(或flex/bison)用于语法,并且不会太复杂.他们应该处理最新的ANSI C/C++定义.
这是我到目前为止所发现的,但没有详细查看它们(想法?):
我希望将此作为将C/C++源代码翻译成新玩具语言的起点.
谢谢!-Matt
(已添加2/9):只是澄清:除了C/C++代码本身之外,我还希望从预处理器中提取语义信息.我不希望"#define foo 42"消失在整数"42"中,但仍然附加到名称"foo".不幸的是,这排除了几个首先运行预处理器并且只提供C/C++解析树的解决方案.
我有一组用C语言编写的函数定义,其中一些额外的关键字可以放在一些参数之前(例如,与"unsigned"或"register"相同)我需要分析这些行以及一些函数存根并从它们生成实际的C代码.
这是正确的,Flex/Yacc是最合适的方式吗?
它会比使用正则表达式写一个Shell或Python脚本慢(这可能会变得非常痛苦,因为我认为,如果额外关键字的数量变得更大并且它们的效果会有相当的不同),前提是我对分析器/解析器没有经验(虽然我知道LALR如何完成它的工作)?
Lex/Yacc上有哪些好的材料可以解决类似的问题吗?我能找到的所有论文都使用了与"玩具"计算器相同的原始例子.
任何帮助将不胜感激.
我知道这是有原因的,但我还没有找到一个好的、简洁的解释来解释为什么 LEX/YACC 不能用于 C++。我也有兴趣知道 LEX/YACC 是否可以用来解析 Objective C,或者该语言是否遇到同样的问题。(请注意,我指的是 ObjC,而不是 Obj-C++。)谢谢。
我查看了以下软件工具:
ANTLR似乎是最直接的,但缺乏文档.Ragel看起来也是可能的,但我没有看到将BNF转换为其语法的简单方法.
还有哪些其他可用于BNF输入并生成相应的,Unicode友好,跨平台,独立的C++解析器的工具?
非常感谢所有的建议.
编辑:将Objective-C要求更改为C++.