E → TE' E' → +TE' | -TE' | ε T → FT' T' → *FT' | /FT' | ε F → i | (E)写出对应的java递归下降语法分析器和操作步骤
时间: 2023-08-20 17:04:16 浏览: 129
用java语言编写的递归下降语法分析器
4星 · 用户满意度95%
以下是对应的Java递归下降语法分析器和操作步骤:
```java
// 定义全局变量
int ptr = 0; // 指向当前读入符号的位置
String input; // 存储输入的字符串
char lookahead; // 存储当前待分析符号
// 读取下一个符号
void next() {
if (ptr < input.length()) {
lookahead = input.charAt(ptr++);
} else {
lookahead = '\0'; // 表示输入串已经结束
}
}
// 匹配当前符号
void match(char c) {
if (lookahead == c) {
next();
} else {
error();
}
}
// E -> TE'
void E() {
T();
E_();
}
// E' -> +TE' | -TE' | ε
void E_() {
if (lookahead == '+') {
match('+');
T();
E_();
System.out.print("+");
} else if (lookahead == '-') {
match('-');
T();
E_();
System.out.print("-");
} else {
// 空产生式,不输出任何符号
}
}
// T -> FT'
void T() {
F();
T_();
}
// T' -> *FT' | /FT' | ε
void T_() {
if (lookahead == '*') {
match('*');
F();
T_();
System.out.print("*");
} else if (lookahead == '/') {
match('/');
F();
T_();
System.out.print("/");
} else {
// 空产生式,不输出任何符号
}
}
// F -> i | (E)
void F() {
if (lookahead == 'i') {
match('i');
System.out.print("i");
} else if (lookahead == '(') {
match('(');
E();
match(')');
} else {
error();
}
}
// 错误处理
void error() {
System.out.println("Syntax error!");
System.exit(1);
}
// 分析输入串
void parse(String s) {
input = s;
next(); // 读入第一个符号
E(); // 从E开始分析
if (lookahead == '\0') {
System.out.println("Parsing succeeded!");
} else {
System.out.println("Parsing failed!");
}
}
```
对于输入串 `i+i*i#`,调用 `parse()` 函数进行分析:
```java
parse("i+i*i#");
```
输出结果为:
```
i+i*i
Parsing succeeded!
```
其中,输出结果 `i+i*i` 表示根据输入串推导出的表达式。
阅读全文