我正在尝试使用一种代码生成器来帮助对传统的C / C ++混合项目进行单元测试。我没有发现任何一种独立的工具可以从声明中生成存根代码。所以我决定建立一个,它应该不那么难。

拜托,任何人都可以给我一个标准的语法链接,更好地用yacc语言描述。

希望我不是重新发明轮子,请在这种情况下帮助我。

最诚挚的问候, 凯文

有帮助吗?

解决方案

来自 C ++ FAQ Lite

38.11是否有可用的C ++语法?

  

你想要的主要yacc语法   来自Ed Willink。艾德相信他的   语法完全符合   然而,他是ISO / ANSI C ++标准   不保证:“语法有   不是,"他说,“已经被愤怒地使用了。”   你可以获得没有语法   动作例程语法   使用虚拟动作例程。您   也可以相应的   词法。对于那些人   对他如何实现一个感兴趣   无上下文解析器(通过推送所有   含糊不清加少数   解析后稍后进行修复   完成),你可能想读   他的论文的第4章。

     

还有一个非常古老的yacc语法   不支持模板,   异常,也不是命名空间;加上它   偏离核心语言   一些微妙的方式。你可以得到它   语法此处这里

其他提示

我最近发现了一些C ++的语法文件(C ++ 1998: ISO / IEC 14882:1998 和C ++ 2008: ISO / IEC SC22 / WG21 N2723 = 08-0233 )在语法软件网站。语法以 Enahnced BNF,DMS BNF,BGF,SDF和Rascal 表示法表示。遗憾的是,C ++语法似乎没有得到更新(没有C ++ 2003或C ++ 11)。

Jared的链接是你可以获得的无上下文语法最接近的东西。某些事情确实需要延迟以供日后使用,但这比一些参数更好于C ++的上下文敏感语法。

更糟糕的是,C ++ 1x会显着地复杂化语法。为了获得完美的C ++解析,解析器需要实现足够的标准来正确地执行重载解析,包括模板参数推导,这反过来将需要概念机制,lambdas,实际上几乎所有的语言,除了两阶段名称查找和异常规范,如果我没记错的话,不需要实际的实现来成功解析程序。

实际上,如果可以解析C ++,那么你就是编译器的一半。

对于另一种方法,您可以考虑在现有编译器上进行背负。

GCC-XML 将“编译” C ++到XML文件中有很多有用的信息;它可能足以满足您的目的。

不幸的是,GCC-XML只维护了1/4,并且让它工作可能很有趣。祝你好运,如果你走这条路。

我最近发现了这一个。我没试过,所以不确定它是否有效。您能否提供有关您正在尝试开发的工具的更多信息?我下载了这个语法因为我正在使用一个仪器工具,所以我可以为我的单元测试添加覆盖信息框架

重新阅读评论后......

我认为此工具完全符合您的需求。

我们的DMS软件再造工具包可以通过强大的, 全功能的C ++解析器。看到 http://www.semanticdesigns.com/Products/FrontEnds/CppFrontEnd.html 这会构建AST和符号表,并可以推断出任何表达式的类型。 DMS使人们可以进行任意分析和转换 关于C ++代码。

一个“简单”转换正在检测代码以收集测试覆盖率 数据;我们将此作为COTS工具提供。请参阅本文以了解DMS的用途: http://www.semanticdesigns.com/Company/Publications/TestCoverage.pdf

2013年9月编辑(这个答案有点陈旧):DMS的C ++ 解析器/名称解析/控制流分析处理完整的C ++ 11, 在ISO,GNU和Microsoft变体中。它还将解析(并保留) 包含大多数预处理器条件的源代码。它有一个明确的语法 与GCC或Clang不同,推动解析过程。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top