C++ 解析器来获取C代码的完全括号语法

C++ 解析器来获取C代码的完全括号语法,c++,c,gnu,C++,C,Gnu,作为项目的一部分,我正在尝试为C/C++语法中给出的循环开发一个检测区域的代码。但这看起来要复杂得多!解析器应该处理给定的{,一条语句用于循环,一条语句if-else控件,等等 我想知道是否有任何稳定的工具(GNU是首选)使C/C++代码完全被括起来 提前谢谢 进一步信息 所谓完全括号,我的意思是通过{和}标记循环的范围 例如: 输入: for (i = 0; i < 10; i++) if (i % 2) j++; else j--; (i=

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

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

提前谢谢

进一步信息

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

例如:

输入:

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

如果(i%2)
j++;
其他的
j--;
输出:

  for (i = 0; i < 10; i++){
    if (i % 2){
      j++;
    }else{
      j--;
    }
  }
(i=0;i<10;i++)的
{
如果(i%2){
j++;
}否则{
j--;
}
}

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

对于将来的参考,修改如下:

在pycparser中,修改
pycparser/c_generator.py中的
visit_for
声明,方法如下:

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之前添加
{
。\u在它之后生成
}

特征

  • 识别码、排列、分配等
  • 对齐“=”和变量定义
  • 对齐结构初始值设定项
  • 对齐#定义内容
  • 对齐反斜杠换行符
  • 重新格式化注释(稍微)
  • 固定字符间距
  • 添加或删除返回语句上的参数
  • 在单个语句if/do/while/for上添加或删除大括号
  • 支持嵌入式SQL“EXEC SQL”功能
  • 高度可配置-从0.60版起,有454个可配置选项

尝试astyle->如果您没有编写完整的解析器,您将如何处理括号内的内容?我建议您为您进行解析。@Najzero谢谢!但该工具似乎只处理一个语句半列结尾结构。它遗漏了我问题中的示例。@Pubby我正在开发一个源代码到源代码生成器并行化循环语句。太好了!正是我想要的!谢谢。Op说我正在开发一个源代码到源代码生成器来并行化循环语句。这个答案到底有什么帮助?它无法访问代码结构或符号的含义,没有它,你就无法“并行化循环”或者做任何其他非琐碎的代码操作。@IraBaxter 1.它回答了“我想知道是否有稳定的工具(GNU是首选)可以使C/C++代码完全被括起来?”2.该项目是开源的3.它做OP想要的事情。4.我与uncrustify无关(用户除外)5.该问题可能应a)更新以反映其最终解决方案,或b)迁移至,因为其在技术上不适合SO格式(但AFAIR当时不存在SoftwareRec)