用java写一个词法分析器
时间: 2024-01-05 17:05:07 浏览: 33
好的,我可以为你提供一个基于 Java 的简单词法分析器实现。你可以参考以下代码:
```java
public class Lexer {
private String input;
private int currentPosition;
public Lexer(String input) {
this.input = input;
this.currentPosition = 0;
}
public Token getNextToken() {
while (currentPosition < input.length()) {
char currentChar = input.charAt(currentPosition);
if (Character.isDigit(currentChar)) {
return new Token(TokenType.INTEGER, readInteger());
}
if (Character.isLetter(currentChar)) {
return new Token(TokenType.IDENTIFIER, readIdentifier());
}
if (currentChar == '+') {
currentPosition++;
return new Token(TokenType.PLUS, "+");
}
if (currentChar == '-') {
currentPosition++;
return new Token(TokenType.MINUS, "-");
}
if (currentChar == '*') {
currentPosition++;
return new Token(TokenType.MULTIPLY, "*");
}
if (currentChar == '/') {
currentPosition++;
return new Token(TokenType.DIVIDE, "/");
}
if (currentChar == '(') {
currentPosition++;
return new Token(TokenType.LEFT_PAREN, "(");
}
if (currentChar == ')') {
currentPosition++;
return new Token(TokenType.RIGHT_PAREN, ")");
}
if (currentChar == '=') {
currentPosition++;
return new Token(TokenType.EQUALS, "=");
}
if (currentChar == ';') {
currentPosition++;
return new Token(TokenType.SEMICOLON, ";");
}
if (Character.isWhitespace(currentChar)) {
skipWhitespace();
continue;
}
throw new RuntimeException("Invalid token: " + currentChar);
}
return new Token(TokenType.EOF, "");
}
private String readInteger() {
StringBuilder sb = new StringBuilder();
while (currentPosition < input.length() && Character.isDigit(input.charAt(currentPosition))) {
sb.append(input.charAt(currentPosition));
currentPosition++;
}
return sb.toString();
}
private String readIdentifier() {
StringBuilder sb = new StringBuilder();
while (currentPosition < input.length() && Character.isLetterOrDigit(input.charAt(currentPosition))) {
sb.append(input.charAt(currentPosition));
currentPosition++;
}
return sb.toString();
}
private void skipWhitespace() {
while (currentPosition < input.length() && Character.isWhitespace(input.charAt(currentPosition))) {
currentPosition++;
}
}
}
```
这是一个简单的词法分析器,它可以识别整数、标识符、运算符等。你可以根据需要修改或扩展它以适应你的具体需求。