用java语言实现词法分析的实验
时间: 2024-02-05 21:13:13 浏览: 86
词法分析(java实现)
4星 · 用户满意度95%
好的,以下是一个简单的用 Java 实现词法分析的示例代码:
```java
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Lexer {
private String input;
public Lexer(String input) {
this.input = input;
}
public List<Token> tokenize() {
List<Token> tokens = new ArrayList<>();
Pattern pattern = Pattern.compile("\\s*(\\d+|\\w+|.)");
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
String tokenValue = matcher.group(1);
TokenType tokenType = getTokenType(tokenValue);
Token token = new Token(tokenType, tokenValue);
tokens.add(token);
}
return tokens;
}
private TokenType getTokenType(String tokenValue) {
if (tokenValue.matches("\\d+")) {
return TokenType.NUMBER;
} else if (tokenValue.matches("\\w+")) {
return TokenType.WORD;
} else {
return TokenType.OPERATOR;
}
}
public static void main(String[] args) {
String input = "2 + 3 * 5";
Lexer lexer = new Lexer(input);
List<Token> tokens = lexer.tokenize();
for (Token token : tokens) {
System.out.println(token.getType() + ": " + token.getValue());
}
}
}
enum TokenType {
NUMBER, WORD, OPERATOR
}
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;
}
}
```
以上代码实现了一个简单的词法分析器,能够将输入字符串中的数字、字母和操作符分别识别出来,并将它们组成相应的 Token 对象。在 main 方法中,我们使用该 Lexer 对象对字符串 "2 + 3 * 5" 进行词法分析,并打印出分析结果。输出为:
```
NUMBER: 2
OPERATOR: +
NUMBER: 3
OPERATOR: *
NUMBER: 5
```
阅读全文