任何人都可以告诉我如何编写程序,我必须从文本文件中读取c程序,然后计算if-else语句的数量,不包括嵌套的if-else。 在这个程序中,我已经计算了文本文件中的if和else的数量,但是如何从这个计数中排除嵌套? 请帮帮我。
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);
}
}
}
答案 0 :(得分:0)
如果您不熟悉Java,我建议使用Python pycparser https://github.com/eliben/pycparser。如果必须使用Java,请选中Parsing / reading C-Header files using Java
答案 1 :(得分:0)
如果没有看到要读取的原始文件,我会使用正则表达式来计算if / else的总数,然后计算嵌套if / else的数量。结果的数学应该非常简单......:)
答案 2 :(得分:0)
通常计算if-else语句你指定的方式是错误的'因为在编程语言中if-else语句不仅包含if
或else
的行(考虑'if'或评论中的“其他”字样等等)。它完全是由一组特定规则定义的语言中的语句 - 语法。此外,您的代码将从甚至不是C程序成功返回,这可能不正确......
因此解决问题的最终方法是为输入程序构建一个AST tree并遍历它只计算顶级if-else语句。
有几种工具可以帮助您解决此问题。
它们都可以从指定的语法生成语言解析器。您可以使用这些解析器来确定您输入的程序包含的内容。
这种方法的主要问题是找到(创建?)正确的语法。例如,ANTLR(https://github.com/antlr/grammars-v4)和JavaCC(https://java.net/projects/javacc/downloads/directory/contrib/grammars)都有很多语法;但是它们都不能用于生成AST - 只会产生普通的解析。另一方面,因为你只需要计算if-else语句,你可能只对解析很好(没有AST树)......
所以此时有两种可能的解决方案:
ps:有关更新语法以支持AST树的更多信息,请参阅How to implement JJTree on grammar(JavaCC)和How to output the AST built using ANTLR?(ANTLR)。