gpt4 book ai didi

java - 区分 "Class brackets"和 "Method bracket"的 JFlex Lexer

转载 作者:行者123 更新时间:2023-12-01 18:01:13 29 4
gpt4 key购买 nike

我需要为 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 是生成词法分析器的正确工具。然而,在查看了一些例子之后。我找不到区分类括号和方法括号的方法。我发现大多数标记器只是将它们识别为相同的标记。另外,如何区分方法应用和变量标识符?

最佳答案

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)”生成的 token 流应该是Identifier, OpeningParenthesis, Identifier, ClosingParenthesis

现在,在解析器中,您将通过函数名称后跟一个左括号来识别函数名称,但这又是解析器的工作,而不是词法分析器的工作。

关于java - 区分 "Class brackets"和 "Method bracket"的 JFlex Lexer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40776372/

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