我有一个文件,其中包含任意数量的c ++代码行,每行代码都是自包含的(这意味着它在main函数中本身有效)。但是,我不知道有多少行(如果有的话)将具有有效的c ++语法。示例文件可能是
int length, width; // This one is fine
template <class T className {}; // Throws a syntax error
我想要做的是将所有具有有效语法的行写入第二个文件。目前,我已经在python中编写了一个程序来读取每一行,将其置于以下形式
int main() {
// Line goes here
return 0;
}
并尝试编译它,如果编译成功则返回True,否则返回False,然后我用它来确定要写入输出文件的行。例如,第一行将生成包含
的文件int main() {
int length, width;
return 0;
}
将编译正常并返回True到python程序。但是,我很好奇是否有任何类型的try-catch语法与编译器一起使用,因此我可以将文件的每一行放在try-catch块中,如果没有抛出异常,则将其写入输出,或者如果我可以告诉编译器忽略语法错误。
编辑:我被问到有关为什么需要这样做的详细信息,我将是第一个承认这是一个奇怪问题的人。我这样做的原因是因为我有另一个程序(其中我不知道所有的实现细节)将大量行写入文件,每个程序都应该能够独立存在。我也知道这个程序几乎肯定会写出有语法错误的行。我要做的是编写一个程序,删除任何无效的行,以便生成的文件可以编译而不会出错。我现在在我的python程序中有什么用,但我想弄清楚是否有更简单的方法。
编辑2:虽然我认为我已经得到了答案 - 我无法真正使用编译器进行try-catch,这已经足够了。谢谢大家!
答案 0 :(得分:0)
你是什么意思&#34;每一行都是独立的&#34;?如果一行C ++代码的语法有效,则很大程度上取决于该行之前或之后的代码。给定的代码行可能在函数内有效,但不在函数体外。所以,只要你不能定义自己的意思,那就是自给自足的&#34;很难解决你的问题。
答案 1 :(得分:0)
在C ++源文件的上下文中语法正确的各行代码本身在语法上不一定正确。
例如:
int length, width;
恰好作为main
函数的一部分或单独使用有效 - 但它具有不同的含义(本身它将length
和width
定义为静态对象)。
此:
}
在上下文中有效,但不能单独使用。
编译器通常无法忽略语法错误。一旦遇到语法错误,编译器就无法解释代码的其余部分。
当你阅读英文时,adfasff iyufoyur; ^^ $(( - 但是你通常可以在出错之后恢复并识别有效的语法。编程语言的编译器不是为了执行那种恢复而设计的;可能C ++语法的本质会使它变得更加困难,并且只是没有足够的要求让它值得做。
我不确定您对单行代码“正确”的标准是什么。一种可能性是将代码行写入文件,包含在main
:
int main() {
// insert arbitrary line here
}
然后编译生成的源文件。我不确定我能看到它会如何特别有用,但这是我能找到你所要求的最接近的。