1
12
Coccinelle 很容易做到。
编辑: 语义补丁示例:
从文档中:
你有一套很好的例子 here . 邮件列表是非常活跃和有用的。 |
2
3
下面的coccinelle语义补丁将进行转换。
|
3
1
这个 DMS Software Reengineering Toolkit 可以通过应用程序转换做到这一点。 与特定示例匹配的特定DMS转换:
你需要另一条规则来处理你的另一个案子,但表达起来同样容易。 转换操作源代码结构而不是文本,因此布局和注释不会影响识别或应用程序。规则中的引号不是传统的字符串引号,而是将规则语法语言与用于指定要更改的具体语法的模式语言分开的元语言引号。 如果要保留预处理指令,则会遇到一些问题。由于您显然愿意使用预处理器扩展代码,因此可以要求dms作为转换步骤的一部分进行预处理;它内置了完整的gcc4和gcc4兼容的预处理器。 正如其他人所观察到的,这是一个相当简单的情况,因为您指定它在完整语句级别工作。如果您想去掉任何类似于此语句的赋值,并将这些赋值嵌入到各种上下文(初始化器等)中,则可能需要一组更大的转换来处理各种特殊情况,并且可能需要生成其他代码结构(例如。,适当类型的临时变量)。像dms这样的工具的好处是,它可以显式地计算任意表达式的符号类型(因此是任何所需temp的类型声明),并且您可以相当直接地编写这么大的集合并应用它们。 尽管如此,我不确定做三元条件表达式消除操作的真正价值。一旦编译器得到结果,您可能会得到类似的目标代码,就好像您根本没有完成转换一样。毕竟,编译器也可以应用保持等价性的转换。 不过,在一般情况下进行定期更改显然是有价值的。 (DMS可以将源到源程序转换应用到许多语言,包括C、C++、爪哇、C和P)。 |
4
0
我不知道三元运算符作为
expr_is_true ? exec_if_expr_is_TRUE : exec_if_expr_is_FALSE;
如果表达式的计算结果为true,则执行
expr_is_false ? exec_if_expr_is_FALSE : exec_if_expr_is_TRUE; |
5
0
如果语句非常规则,为什么不通过一个小的perl脚本运行文件呢?对于您的示例行,执行查找和转换的核心逻辑很简单。以下是一个简单的方法:
你会像这样运行它:
当然,如果文本模式没有你发布的那样规则,它会变得越来越难。但是免费,快捷,容易尝试。 |
A.E · python中具有多个if语句的列表理解 2 年前 |
fc27 · 如果条件python循环不工作,请在中继续 2 年前 |
sentimain · 如何将if语句合并到另一个if语句中? 2 年前 |
bcsfh · 如果出现其他情况,则加倍 2 年前 |
Robbie McM · 如何使列表中的所有数据帧具有相同的列数? 2 年前 |