相关疑难解决方法(0)

用于创建C/C++解析器/分析器的好工具

有什么好的工具可以快速开始解析和分析C/C++代码?

特别是,我正在寻找处理C/C++预处理器和语言的开源工具.优选地,这些工具将使用lex/yacc(或flex/bison)用于语法,并且不会太复杂.他们应该处理最新的ANSI C/C++定义.

这是我到目前为止所发现的,但没有详细查看它们(想法?):

  • CScope - 老式C分析仪.但是,似乎没有做完整的解析.被描述为寻找C函数的美化'grep'.
  • GCC - 每个人最喜欢的开源编译器.非常复杂,但似乎做到了这一切.有一个相关项目用于创建名为GEM的 GCC扩展,但自GCC 4.1(2006)以来尚未更新.
  • PUMA - PUre MAnipulator.(来自页面:"这个项目的目的是提供一个用于分析和操作C/C++源代码的类库.为此,PUMA提供了用于扫描,解析和操作C/C++源代码的类.") .这看起来很有希望,但自2001年以来一直没有更新.显然PUMA已被纳入AspectC++,但即使这个项目自2006年以来也没有更新.
  • 各种C/C++原始语法.你可以得到c-c ++ - grammars-1.2.tar.gz,但自1997年以来一直没有得到维护.谷歌的一些搜索引出了其他可以作为起点的基本lex/yacc语法.
  • 还有其他人?

我希望将此作为将C/C++源代码翻译成新玩具语言的起点.

谢谢!-Matt

(已添加2/9):只是澄清:除了C/C++代码本身之外,我还希望从预处理器中提取语义信息.我不希望"#define foo 42"消失在整数"42"中,但仍然附加到名称"foo".不幸的是,这排除了几个首先运行预处理器并且只提供C/C++解析树的解决方案.

c c++ parsing yacc lex

49
推荐指数
8
解决办法
6万
查看次数

解析类C定义字符串最有效的方法?

我有一组用C语言编写的函数定义,其中一些额外的关键字可以放在一些参数之前(例如,与"unsigned"或"register"相同)我需要分析这些行以及一些函数存根并从它们生成实际的C代码.

  • 这是正确的,Flex/Yacc是最合适的方式吗?

  • 它会比使用正则表达式写一个Shell或Python脚本慢(这可能会变得非常痛苦,因为我认为,如果额外关键字的数量变得更大并且它们的效果会有相当的不同),前提是我对分析器/解析器没有经验(虽然我知道LALR如何完成它的工作)?

  • Lex/Yacc上有哪些好的材料可以解决类似的问题吗?我能找到的所有论文都使用了与"玩具"计算器相同的原始例子.

任何帮助将不胜感激.

parsing yacc flex-lexer

5
推荐指数
1
解决办法
701
查看次数

为什么编译器不能使用 LEX/YACC 来解析 C++?

我知道这是有原因的,但我还没有找到一个好的、简洁的解释来解释为什么 LEX/YACC 不能用于 C++。我也有兴趣知道 LEX/YACC 是否可以用来解析 Objective C,或者该语言是否遇到同样的问题。(请注意,我指的是 ObjC,而不是 Obj-C++。)谢谢。

c++ compiler-construction yacc bison

5
推荐指数
1
解决办法
2602
查看次数

生成BNF语法的C++代码

我查看了以下软件工具:

ANTLR似乎是最直接的,但缺乏文档.Ragel看起来也是可能的,但我没有看到将BNF转换为其语法的简单方法.

还有哪些其他可用于BNF输入并生成相应的,Unicode友好,跨平台,独立的C++解析器的工具?

非常感谢所有的建议.

编辑:将Objective-C要求更改为C++.

c++ unicode parsing bnf lexical-analysis

3
推荐指数
1
解决办法
5438
查看次数