gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:50:55 24 4
gpt4 key购买 nike

谁能告诉我如何编写一个程序,我必须从文本文件中读取一个 c 程序,然后计算 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 语句不仅是包含 ifelse 的行(考虑评论中的“if”或“else”等词)。它完全是由一组特定规则定义的语言中的语句 - 语法。此外,您的代码甚至不会从 C 程序成功返回,这可能是不正确的...

所以解决问题的 final方法是构建一个AST tree对于输入程序并遍历它只计算顶级 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 语句。

ps:有关更新语法以支持 AST 树的更多信息,请参阅 How to implement JJTree on grammar (JavaCC) 和 How to output the AST built using ANTLR? (ANTLR)。

关于java - 计算 if 和 else 的个数,不包括嵌套的 if-else,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22743247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com