请用Java实现一个词法分析器
时间: 2024-02-15 18:02:53 浏览: 41
好的,以下是一个简单的Java词法分析器示例:
```java
import java.util.regex.*;
public class Lexer {
private String input;
private int currentPosition;
private Pattern identifierPattern = Pattern.compile("[a-zA-Z]+");
private Pattern numberPattern = Pattern.compile("\\d+");
public Lexer(String input) {
this.input = input;
this.currentPosition = 0;
}
public Token getNextToken() {
if (currentPosition >= input.length()) {
return null;
}
char currentChar = input.charAt(currentPosition);
if (Character.isLetter(currentChar)) {
Matcher matcher = identifierPattern.matcher(input.substring(currentPosition));
if (matcher.find()) {
String identifier = matcher.group();
currentPosition += identifier.length();
return new Token(TokenType.IDENTIFIER, identifier);
}
throw new RuntimeException("Invalid token: " + input.substring(currentPosition));
}
if (Character.isDigit(currentChar)) {
Matcher matcher = numberPattern.matcher(input.substring(currentPosition));
if (matcher.find()) {
String number = matcher.group();
currentPosition += number.length();
return new Token(TokenType.NUMBER, number);
}
throw new RuntimeException("Invalid token: " + input.substring(currentPosition));
}
if (currentChar == '+') {
currentPosition++;
return new Token(TokenType.PLUS, "+");
}
if (currentChar == '-') {
currentPosition++;
return new Token(TokenType.MINUS, "-");
}
throw new RuntimeException("Invalid token: " + currentChar);
}
}
```
这个词法分析器具有两个正则表达式模式,一个用于识别标识符,另一个用于识别数字。它还可以识别加号和减号。当它遇到无效的标记时,它会抛出一个运行时异常。在这个示例中,我们只考虑了一些简单的情况,但是你可以添加更多的模式和标记类型来扩展它的功能。