E→T|E+T|E-T T→F|T*F|T/F F→i|(E)递归下降语法分析器
时间: 2023-08-08 17:08:16 浏览: 86
以下是基于给定文法的递归下降语法分析器的伪代码(使用 Python 风格的语法):
```python
# 定义全局变量
lookahead = None
index = 0
input_str = ""
def parse_expression():
parse_term()
while lookahead == '+' or lookahead == '-':
op = lookahead
match(lookahead)
parse_term()
print(op)
def parse_term():
parse_factor()
while lookahead == '*' or lookahead == '/':
op = lookahead
match(lookahead)
parse_factor()
print(op)
def parse_factor():
if lookahead.isdigit():
print("i")
match('digit')
elif lookahead == '(':
match('(')
parse_expression()
match(')')
else:
error()
def match(token):
global lookahead, index
if lookahead == token:
if index < len(input_str):
index += 1
lookahead = input_str[index]
else:
lookahead = None
else:
error()
def error():
print("Syntax error!")
# 测试代码
input_str = "i*i+i"
lookahead = input_str[index]
parse_expression()
```
其中,`lookahead` 表示当前待处理的输入符号,`index` 表示输入符号串中的位置,`input_str` 存储输入符号串。`parse_expression`、`parse_term` 和 `parse_factor` 分别对应 E、T 和 F 的产生式。`match` 函数用于比较当前 `lookahead` 是否与预期的 `token` 相同,如果相同,则将 `lookahead` 更新为下一个输入符号。`error` 函数用于处理语法错误。
在测试代码中,将输入符号串设置为 "i*i+i",然后调用 `parse_expression` 进行语法分析。
阅读全文