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

2024-04-20 08:35:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我想验证给定的字符串在

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

什么样的核查方式比较好?你知道吗


Tags: 字符串returnheremainexitcodeerrorpass
2条回答

用数值常量替换所有出现的已知变量。在您的代码中,这将是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;或者,由于您不需要计算而只需要验证,所以编写自己的。你知道吗

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

这样您就可以让真正的C编译器检查代码段。这将比在Python程序中实现所有的C解析和检查要容易得多,也可靠得多。你知道吗

相关问题 更多 >