请编写一个Java程序,实现词法分析器功能
时间: 2024-05-16 10:12:20 浏览: 16
好的,以下是一个简单的Java程序,实现了词法分析器的基本功能:
```java
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Lexer {
private String input;
private String[] keywords = {"if", "else", "while", "for", "int", "float", "double", "char", "string", "boolean"};
private String[] operators = {"+", "-", "*", "/", "=", "<", ">", "&&", "||", "!", "==", "!=", "<=", ">="};
private String[] symbols = {"(", ")", "{", "}", ",", ";", ":"};
public Lexer(String input) {
this.input = input;
}
public void analyze() {
String[] tokens = input.split("\\s+");
for (String token : tokens) {
if (isKeyword(token)) {
System.out.println(token + " is a keyword");
} else if (isOperator(token)) {
System.out.println(token + " is an operator");
} else if (isSymbol(token)) {
System.out.println(token + " is a symbol");
} else if (isNumber(token)) {
System.out.println(token + " is a number");
} else if (isString(token)) {
System.out.println(token + " is a string");
} else if (isIdentifier(token)) {
System.out.println(token + " is an identifier");
} else {
System.out.println(token + " is not recognized");
}
}
}
private boolean isKeyword(String token) {
for (String keyword : keywords) {
if (token.equals(keyword)) {
return true;
}
}
return false;
}
private boolean isOperator(String token) {
for (String operator : operators) {
if (token.equals(operator)) {
return true;
}
}
return false;
}
private boolean isSymbol(String token) {
for (String symbol : symbols) {
if (token.equals(symbol)) {
return true;
}
}
return false;
}
private boolean isNumber(String token) {
Pattern pattern = Pattern.compile("\\d+(\\.\\d+)?");
Matcher matcher = pattern.matcher(token);
return matcher.matches();
}
private boolean isString(String token) {
Pattern pattern = Pattern.compile("\".*\"");
Matcher matcher = pattern.matcher(token);
return matcher.matches();
}
private boolean isIdentifier(String token) {
Pattern pattern = Pattern.compile("[a-zA-Z]\\w*");
Matcher matcher = pattern.matcher(token);
return matcher.matches();
}
}
```
你可以将需要分析的代码作为字符串传入 `Lexer` 类的构造方法中,然后调用 `analyze` 方法进行分析。该程序会将代码分割成单词,并判断每个单词的类型,输出相应的信息。如果有任何问题,请随时问我。