我需要为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是生成词法分析器的正确工具。但是看了一些例子。我找不到区分类括号和方括号的方法。我发现大多数标记符只是将它们识别为相同的标记。另外,如何区分方法apply和变量标识符?
答案 0 :(得分:4)
我找不到区分类括号和方法括号的方法。
他们没有任何词汇上的不同。 "{".equals("{")
。区分它们的方法是通过解析器中的上下文 。词法分析者不能做出这种区分,也不应该这样做。
另外,我如何区分方法apply和变量标识符
在词法分析器中,你没有。标识符是标识符。从“f(x)”生成的令牌流应为Identifier, OpeningParenthesis, Identifier, ClosingParenthesis
。
现在在解析器中,你会识别一个函数名,因为它后跟一个开括号,但同样是解析器,而不是词法分析器的工作。