2

作为项目的一部分,我正在尝试开发一个代码来检测for以 C/C++ 语法给出的循环区域。但这比它看起来要复杂得多!解析器应该处理给定的{、一条语句for循环、一条语句if-else控制等。

我想知道是否有任何稳定的工具(首选 GNU)来使 C/C++ 代码完全括起来?

提前致谢!

更多的信息

通过完全括号,我的意思是用{and标记循环的范围}

例子:

输入:

  for (i = 0; i < 10; i++)
    if (i % 2)
      j++;
    else
      j--;

输出:

  for (i = 0; i < 10; i++){
    if (i % 2){
      j++;
    }else{
      j--;
    }
  }
4

2 回答 2

1

我可以使用pycparser找到解决方案。visit_for修改中定义的函数就足够了pycparser/c_generator.py。然后通过运行内置的 pycparser 示例 ( example/c-to-c.py),您将从 C 代码中获得完全括号内的 for 循环。

为了以后的参考,修改如下:

在 pycparser 中,修改 from 中的visit_for声明pycparser/c_generator.py

def visit_For(self, n):
    s = 'for ('
    if n.init: s += self.visit(n.init)
    s += ';'
    if n.cond: s += ' ' + self.visit(n.cond)
    s += ';'
    if n.next: s += ' ' + self.visit(n.next)
    s += ')\n'
    s += self._generate_stmt(n.stmt, add_indent=True)
    return s

{在它之前self._generate_...}之后添加。

于 2013-03-17T07:53:37.873 回答
0

我使用uncrustify 取得了很好的效果

特征

  • 标识代码,对齐括号,分配等
  • 对齐 '=' 和变量定义
  • 对齐结构初始化器
  • 对齐 #define 东西
  • 对齐反斜杠换行符
  • 重新格式化评论(一点点)
  • 修复字符间距
  • 在 return 语句中添加或删除括号
  • 在单语句 if/do/while/for 语句上添加或删除大括号
  • 支持嵌入式 SQL 'EXEC SQL' 东西
  • 高度可配置 - 自 0.60 版起有 454 个可配置选项
于 2013-03-17T08:07:50.473 回答