我想验证给定字符串是
上下文中的有效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
什么是好的验证方式?
答案 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;或者,由于您不需要计算,只需验证,所以请自行编写。