将字符串验证为有效的C代码

时间:2015-05-16 09:52:32

标签: python c verification

我想验证给定字符串是

上下文中的有效C代码
int main() {
    double x[3];
    <insert code here>;
    return EXIT_SUCCESS;
}

实际上,我希望验证

verifyC('x[0]*x[0] + x[1] + 1') // pass
verifyC('x[0]*x[0] + x[1] +') // fail, syntax error
verifyC('x[0]*x[0] + a') // fail, `a` undefined

什么是好的验证方式?

2 个答案:

答案 0 :(得分:2)

最简单的方法是尝试编译一个包含您要检查的字符串的小示例程序。

通过这种方式,您可以通过真正的C编译器检查您的代码段。这比尝试在Python程序中实现所有C解析和检查要容易得多,也更可靠。

答案 1 :(得分:1)

用数字常量替换所有已知变量。在您的代码中,可以是x[0]x[1]x[2]。请注意,在C中允许大量的中间空格,即使在变量内部:x [ 1 ]也是有效的。 (另外:x[01]有效。x[0x01]有效。如果数组大于8个元素:x[010]有效,实际上是x[8]1[x]是有效且等于x[1]。)

数值常数本身必须有效,最好不等于0。 (只是为了防止解析器声明1/x[0]无效!)

更换时,在常数之前和之后插入一个空格。这是为了防止将x[1]2更改为12。不要使用括号!有了这些,sin x[1]无效,但它的替换sin(1)是。

用这个,一个输入字符串

x[0]*x[0] + x[1] + 1

被翻译成

1 * 1 + 1 + 1

可以通过常规程序验证;例如见Safe expression parser in Python;或者,由于您不需要计算,只需验证,所以请自行编写。