谁能告诉我如何编写一个程序,其中我必须从文本文件中读取ac程序,然后计算if-else语句的数量,但不包括嵌套的if- else。在此程序中,我已经计算了文本文件中if和else的数量,但是如何从此计数中排除嵌套的if?请帮助我。
package softwaretesting; import java.io.*; import java.util.Scanner; public class SoftwareTesting { public static void main(String[] args) throws IOException { int countIf = 0, countElse = 0; Scanner input; input = new Scanner(System.in); String fileName; System.out.println("Enter the path of the file from which no of if and else statements are to be counted"); fileName = input.next(); Scanner file; file = new Scanner(new File(fileName)); int count=0; while (file.hasNextLine()) { String line = file.nextLine(); if (line.indexOf("if") != -1 && count%2==0 ) { countIf++; } if (line.indexOf("else") != -1 ) { countElse++; } } { System.out.println("No of If statements: " + countIf); System.out.println("No of Else statements: " + countElse); } } }
通常,以计数方式指定if-else语句是错误的,因为在编程语言中,if-else语句不仅是包含if或的行else(请考虑注释中的“ if”或“ else”词,依此类推)。这完全是由一组特定规则(语法)定义的语言的语句。而且,您的代码甚至不会从C程序成功返回,这可能是不正确的…
if
else
因此,解决此问题的最终方法是为输入程序构建AST树,并仅对顶级if- else语句进行遍历。
有几种工具可以帮助您。
它们都可以从指定的语法生成语言解析器。您可以使用这些解析器来确定输入程序所包含的内容。
这种方法的主要问题是找到(创建?)正确的语法。例如,ANTLR(https://github.com/antlr/grammars-v4)和JavaCC(https://java.net/projects/javacc/downloads/directory/contrib/grammars)都有很多语法;但它们都不能用于生成AST- 仅会产生纯解析。另一方面,由于您只需要计算if-else语句,因此仅解析(不带AST树)可能会比较好…
因此,目前有两种可能的解决方案: