C++ 解析器来获取C代码的完全括号语法
作为项目的一部分,我正在尝试为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=
区域的代码。但这看起来要复杂得多!解析器应该处理给定的{
,一条语句用于循环,一条语句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)