2013-03-16 60 views
2

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

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

在此先感谢!

更多信息

由全加括号,我的意思是{}标志着循环的范围。

实施例:

输入:

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

输出:

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

尝试astyle - > http://astyle.sourceforge.net/astyle.html#_Bracket_Style_Options – Najzero 2013-03-16 12:34:53

+0

如果您没有编写完整的解析器,您将如何处理括号内的内容? – Pubby 2013-03-16 12:36:39

+2

我建议[使用Clang作为图书馆](http://clang.llvm.org/docs/index.html#using-clang-as-a-library)为你解析。 – 2013-03-16 12:40:04

回答

0

我已经使用uncrustify效果极佳

特点

  • 订货号代码,对准上括号,作业等
  • 对齐上 '=' 和变量定义
  • 对齐结构初始化器
  • 对齐#define填充
  • 对齐反斜杠换行符东西
  • 格式化的意见(一点点)
  • 修复跨字符间距
  • 在返回语句添加或删除括号
  • 添加或者/做去除单语句括号/而/ for语句
  • 支持嵌入式SQL 'EXEC SQL' 的东西
  • 高度可配置 - 454个配置选项的0.60版本
+0

太棒了!正是我想要的!谢谢。 – ahmad 2013-03-17 09:02:57

+0

Op说*我正在开发一个源代码生成器来并行化循环语句。*这个答案到底有什么帮助?它不提供对代码结构或符号含义的访问权限,否则不能“并行化循环”或执行任何其他非平凡的代码操作。 – 2015-09-02 18:45:00

+0

@IraBaxter 1.它回答了这样一个问题:“我想知道是否有任何稳定的工具(GNU是首选)使C/C++代码完全被括起来?” 2.该项目是开源的3.它做OP的想法。 4.我没有关联uncrustify(除了作为用户)http://meta.stackexchange.com/questions/57497/limits-for-self-promotion-in-answers 5.这个问题可能应该是a)更新以反映他的最终解决方案或b)迁移到http://softwarerecs.stackexchange.com/,因为它在技术上不适合SO格式(但是在AFAIR时并不存在softwarerecs) – technosaurus 2015-09-02 21:01:32

1

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

对于未来的参考,修改内容如下:

在pycparser,从修改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_...}前添加{