java 中导入和方法调用的词法分析

Lexical Analysis for import and method calls in java

import 语句和方法调用如何在 java 的词法分析中标记化。例如:

import java.util.Scanner

这是否被视为 importjavautilScanner(4 个标记)或 importjava.util.Scanner(2代币)

同样的思路,在:

Scanner input = new Scanner(System.in);
int x = input.nextInt(); 

input.nextInt()被视为inputnextInt()(2个标记)或input.nextInt()(1个标记)

我相信导入将是 1 个词法分析。 Apache Antlr 是定义语法的工具。 Java也是一样

我建议通过导入 Java 语法来使用 Apache Antlr。这将给出正确的解决方案。

Chapter 3 of the JLS中描述了词法分析。

这意味着在您的第一个示例中,它将被标记为

keyword: import 
whitespace 
identifier: java 
seperator: . 
identifier: util 
seperator: .
identifier: Scanner
seperator: ;

所以既不是 2 也不是 4,而是 8 个标记(因为根据 JLS,空格和分隔符是标记)。

同样,input.nextInt(); 是 6 个令牌,因为 () 都是一个令牌(参见 JLS § 3.11)。