通常,以计数方式指定if-else语句是错误的,因为在编程语言中,if-else语句不仅是包含
if或的行
else(请考虑注释中的“ if”或“
else”词,依此类推)。这完全是由一组特定规则(语法)定义的语言的语句。而且,您的代码甚至不会从C程序成功返回,这可能是不正确的…
因此,解决此问题的最终方法是为输入程序构建AST树,并仅对顶级if-
else语句进行遍历。
有几种工具可以帮助您。
- ANTLR
- JavaCC
它们都可以从指定的语法生成语言解析器。您可以使用这些解析器来确定输入程序所包含的内容。
这种方法的主要问题是找到(创建?)正确的语法。例如,ANTLR(https://github.com/antlr/grammars-v4)和JavaCC(https://java.net/projects/javacc/downloads/directory/contrib/grammars)都有很多语法;但它们都不能用于生成AST-
仅会产生纯解析。另一方面,由于您只需要计算if-else语句,因此仅解析(不带AST树)可能会比较好…
因此,目前有两种可能的解决方案:
- 由ANTLR / JavaCC解析器手动生成更新以计数if-else语句。
- 查找/创建ANTLR / JavaCC的C语法,以生成输入程序的AST并遍历它,以搜索顶级if-else语句。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)