小编典典

计算if和else的数量,不包括嵌套的if-else

java

谁能告诉我如何编写一个程序,其中我必须从文本文件中读取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);
    }
}
}

阅读 244

收藏
2020-11-26

共1个答案

小编典典

通常,以计数方式指定if-else语句是错误的,因为在编程语言中,if-else语句不仅是包含if或的行else(请考虑注释中的“ if”或“
else”词,依此类推)。这完全是由一组特定规则(语法)定义的语言的语句。而且,您的代码甚至不会从C程序成功返回,这可能是不正确的…

因此,解决此问题的最终方法是为输入程序构建AST树,并仅对顶级if-
else语句进行遍历。

有几种工具可以帮助您。

  1. ANTLR
  2. JavaCC

它们都可以从指定的语法生成语言解析器。您可以使用这些解析器来确定输入程序所包含的内容。

这种方法的主要问题是找到(创建?)正确的语法。例如,ANTLR(https://github.com/antlr/grammars-v4)和JavaCC(https://java.net/projects/javacc/downloads/directory/contrib/grammars)都有很多语法;但它们都不能用于生成AST-
仅会产生纯解析。另一方面,由于您只需要计算if-else语句,因此仅解析(不带AST树)可能会比较好…

因此,目前有两种可能的解决方案:

  1. 由ANTLR / JavaCC解析器手动生成更新以计数if-else语句。
  2. 查找/创建ANTLR / JavaCC的C语法,以生成输入程序的AST并遍历它,以搜索顶级if-else语句。
2020-11-26