有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

区分“类括号”和“方法括号”的java JFlex Lexer

我需要为java源代码剽窃检测器编写一个lexer。 下面是我想要实现的一个例子

//Java code                                   Tokens:
public class Count {                          Begin Class
    public static void main(String[] args)    Var Def, Begin Method
        throws java.io.IOException {
      int count = 0;                          Var Def, Assign
      while (System.in.read() != -1)          Apply, Begin While
        count++;                              Assign, End While
      System.out.println(count+" chars.");    Apply

    }                                         End Method
}                                             End Class

我认为Jflex是生成lexer的正确工具。然而,在看了一些例子之后。我找不到区分类括号和方法括号的方法。我发现的大多数标记化者只是将它们识别为相同的标记。另外,如何区分方法应用和变量标识符


共 (1) 个答案

  1. # 1 楼答案

    I cannot find a way to distinguish class brackets and method brackets.

    它们在词汇上没有什么不同"{".equals("{")。区分它们的方式是通过解析器中的上下文。lexer不能做出这种区分,也不应该

    Also how do I distinguish a method apply from a variable identifier

    在lexer中,你没有。标识符就是标识符。从“f(x)”生成的令牌流应该是Identifier, OpeningParenthesis, Identifier, ClosingParenthesis

    现在,在解析器中,您将通过以下事实来识别函数名:它后面有一个开括号,但这同样是解析器的工作,而不是词法分析器的工作