区分 "Class brackets" 和 "Method bracket" 的 JFlex Lexer
JFlex Lexer that distinguishes "Class brackets" and "Method bracket"
我需要为 java 源代码抄袭检测器编写词法分析器。
这是我想要实现的示例。
//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 是生成词法分析器的正确工具。但是,在查看了一些示例之后。我找不到区分 class 括号和方法括号的方法。我发现的大多数标记器只是将它们识别为相同的标记。另外,如何区分应用方法和变量标识符?
I cannot find a way to distinguish class brackets and method brackets.
它们在词汇上没有什么不同。 "{".equals("{")
。区分它们的方法是在解析器 中根据上下文。词法分析器无法做出这种区分,也不应该。
Also how do I distinguish a method apply from a variable identifier
在词法分析器中,您不需要。标识符是标识符。从 "f(x)" 生成的令牌流应该是 Identifier, OpeningParenthesis, Identifier, ClosingParenthesis
.
现在在解析器中,您将通过函数名称后跟一个左括号来识别函数名称,但同样这是解析器的工作,而不是词法分析器的工作。
我需要为 java 源代码抄袭检测器编写词法分析器。 这是我想要实现的示例。
//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 是生成词法分析器的正确工具。但是,在查看了一些示例之后。我找不到区分 class 括号和方法括号的方法。我发现的大多数标记器只是将它们识别为相同的标记。另外,如何区分应用方法和变量标识符?
I cannot find a way to distinguish class brackets and method brackets.
它们在词汇上没有什么不同。 "{".equals("{")
。区分它们的方法是在解析器 中根据上下文。词法分析器无法做出这种区分,也不应该。
Also how do I distinguish a method apply from a variable identifier
在词法分析器中,您不需要。标识符是标识符。从 "f(x)" 生成的令牌流应该是 Identifier, OpeningParenthesis, Identifier, ClosingParenthesis
.
现在在解析器中,您将通过函数名称后跟一个左括号来识别函数名称,但同样这是解析器的工作,而不是词法分析器的工作。