java词法分析器源代码
时间: 2023-10-05 22:06:16 浏览: 51
以下是一个简单的Java词法分析器的源代码示例:
```
import java.util.*;
public class Lexer {
private String input;
private int position;
private Token currentToken;
public Lexer(String input) {
this.input = input;
this.position = 0;
this.currentToken = null;
}
public Token getCurrentToken() {
return currentToken;
}
public Token getNextToken() {
if (position >= input.length()) {
return null;
}
char ch = input.charAt(position);
if (Character.isDigit(ch)) {
return readNumber();
} else if (Character.isLetter(ch)) {
return readIdentifier();
} else if (ch == '+') {
position++;
return new Token(TokenType.PLUS, "+");
} else if (ch == '-') {
position++;
return new Token(TokenType.MINUS, "-");
} else if (ch == '*') {
position++;
return new Token(TokenType.MULTIPLY, "*");
} else if (ch == '/') {
position++;
return new Token(TokenType.DIVIDE, "/");
} else {
throw new IllegalArgumentException("Invalid character: " + ch);
}
}
private Token readNumber() {
StringBuilder sb = new StringBuilder();
while (position < input.length() && Character.isDigit(input.charAt(position))) {
sb.append(input.charAt(position));
position++;
}
return new Token(TokenType.NUMBER, sb.toString());
}
private Token readIdentifier() {
StringBuilder sb = new StringBuilder();
while (position < input.length() && Character.isLetter(input.charAt(position))) {
sb.append(input.charAt(position));
position++;
}
return new Token(TokenType.IDENTIFIER, sb.toString());
}
}
enum TokenType {
NUMBER,
IDENTIFIER,
PLUS,
MINUS,
MULTIPLY,
DIVIDE
}
class Token {
private TokenType type;
private String value;
public Token(TokenType type, String value) {
this.type = type;
this.value = value;
}
public TokenType getType() {
return type;
}
public String getValue() {
return value;
}
@Override
public String toString() {
return "Token{" +
"type=" + type +
", value='" + value + '\'' +
'}';
}
}
```
该代码实现了一个简单的词法分析器,可以识别数字、标识符和四种运算符(加、减、乘、除)。在getNextToken方法中,以当前位置的字符为判断依据,分别调用readNumber、readIdentifier和其他方法来读取不同类型的Token。Token类定义了Token的类型和值,并提供了toString方法以便于调试和打印。