/* 0. S->E */ /* 1. E->E+T */ /* 2. E->T */ /* 3. T->T*P */ /* 4. T->P */ /* 5. P->i */ /* 6. P->(E) */写出基于表的LL(1)分析程序
时间: 2024-01-17 18:17:52 浏览: 70
基于表的LL(1)分析程序是一种语法分析方法,用于根据给定的文法和输入串来构建语法树。它使用一个预测分析表来指导分析过程。下面是一个基于表的LL(1)分析程序的示例:
```python
# 定义预测分析表
# 行表示非终结符,列表示终结符
# M[A, a]表示在非终结符A和终结符a的情况下,应该采取的产生式
M = {
'S': {'i': 0, '(': 0},
'E': {'i': 1, '(': 1},
'T': {'i': 2, '(': 2},
'P': {'i': 5, '(': 6, ')': -1, '+': -1, '*': -1, '$': -1}
}
# 输入串
input_str = 'i+i*i$'
# 分析栈
stack = ['$']
# 输入串指针
input_ptr = 0
# 开始符号
start_symbol = 'S'
# 将开始符号入栈
stack.append(start_symbol)
# 分析过程
while True:
# 栈顶符号
top = stack[-1]
# 输入串当前字符
current_char = input_str[input_ptr]
if top == '$' and current_char == '$':
# 分析成功
print('分析成功')
break
elif top in M and current_char in M[top]:
# 根据预测分析表进行相应操作
production = M[top][current_char]
if production == -1:
# 错误处理
print('语法错误')
break
else:
# 弹出栈顶符号
stack.pop()
# 将产生式右部逆序入栈
for symbol in reversed(production):
stack.append(symbol)
elif top == current_char:
# 匹配成功,弹出栈顶符号和输入串指针后移
stack.pop()
input_ptr += 1
else:
# 错误处理
print('语法错误')
break
```
阅读全文