词法分析(Lexical Analysis),又称单词扫描(Tokenizing),是编译器在编译源代码时的一个过程。该过程将源代码分解成为一系列的词素(Token),词素是源程序中一个最小的、有意义的语法单位。
Java 编译器对源代码进行词法分析时,会把源代码拆分为一个个词素。一个词素通常包括一个标识符(Identifier)或关键字(Keyword)、一个运算符(Operator)、一个界符(Delimiter)或者一个常量(Const)。
例如,考虑下面这段 Java 代码:
public class Main {
public static void main(String[] args) {
int num1 = 10;
int num2 = 5;
int sum = num1 + num2;
System.out.println("The sum is: " + sum);
}
}
在词法分析的过程中,Java 编译器将该代码分解为下面这些词素:
KEYWORD: public
KEYWORD: class
IDENTIFIER: Main
LEFT_BRACE: {
KEYWORD: public
KEYWORD: static
KEYWORD: void
IDENTIFIER: main
LEFT_PAREN: (
KEYWORD: String
LEFT_BRACKET: [
RIGHT_BRACKET: ]
IDENTIFIER: args
RIGHT_PAREN: )
LEFT_BRACE: {
KEYWORD: int
IDENTIFIER: num1
ASSIGNMENT: =
NUMERIC_LITERAL: 10
SEMICOLON: ;
KEYWORD: int
IDENTIFIER: num2
ASSIGNMENT: =
NUMERIC_LITERAL: 5
SEMICOLON: ;
KEYWORD: int
IDENTIFIER: sum
ASSIGNMENT: =
IDENTIFIER: num1
ARITHMETIC_OPERATOR: +
IDENTIFIER: num2
SEMICOLON: ;
IDENTIFIER: System
DOT: .
IDENTIFIER: out
DOT: .
IDENTIFIER: println
LEFT_PAREN: (
STRING_LITERAL: "The sum is: "
ARITHMETIC_OPERATOR: +
IDENTIFIER: sum
RIGHT_PAREN: )
SEMICOLON: ;
RIGHT_BRACE: }
RIGHT_BRACE: }
在这个例子中,编译器将源代码分解为了多个词素,这些词素都是有效的语言单元,包括关键字、标识符、运算符、界定符以及常量。词法分析是将源代码抽象为词素,便于后续的语法分析和代码转换。