ll1预测分析栈代码
时间: 2023-11-20 08:52:40 浏览: 52
LL(1)预测分析法是一种自顶向下的语法分析方法,它可以用于判断一个给定的输入串是否符合某个文法。在LL(1)预测分析法中,我们需要维护一个分析栈,用于存储已经读入的符号和推导所使用的产生式。下面是一个简单的LL(1)预测分析栈代码示例:
```python
# 定义文法
grammar = {
'E': {'id': ['T', 'E\'']},
'E\'': {'+': ['+', 'T', 'E\''], 'epsilon': []},
'T': {'id': ['id'], '*': ['*', 'id']}
}
# 定义预测分析表
predict_table = {
'E': {'id': ['T', 'E\'']},
'E\'': {'+': ['+', 'T', 'E\''], '$': ['epsilon'],},
'T': {'id': ['id'], '*': ['*', 'id']}
}
# 定义输入串
input_str = ['id', '*', 'id', '+', 'id', '$']
# 初始化分析栈
stack = ['$']
stack.append('E')
# 开始分析
while len(stack) > 0:
top = stack[-1]
if top in predict_table and input_str[0] in predict_table[top]:
production = predict_table[top][input_str[0]]
stack.pop()
if production != ['epsilon']:
stack.extend(reversed(production))
elif top == input_str[0]:
stack.pop()
input_str.pop(0)
else:
print('Error')
break
if len(stack) == 0 and len(input_str) == 0:
print('Success')
```
在上面的代码中,我们首先定义了一个文法和预测分析表。然后,我们初始化了一个分析栈,将起始符号$E$压入栈中。接下来,我们不断地从输入串中读入一个符号,并从分析栈的顶部取出一个符号进行匹配。如果匹配成功,则将对应的产生式压入分析栈中;如果匹配失败,则报错。最终,如果分析栈为空且输入串也为空,则说明分析成功。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)