LR(0) 自动机活前缀识别 - 状态集合与转移表
LR(0) 自动机活前缀识别
状态集合:
{0, 1, 2, 3, 4, 5, 6}
状态转移表:
| 状态 | a | b | c | d | $ | A | B | |---|---|---|---|---|---|---|---|| | 0 | - | 2 | - | 1 | err | 3 | 4 | | 1 | - | - | - | - | acc | - | - | | 2 | 5 | - | - | - | err | - | - | | 3 | - | - | - | 6 | err | - | - | | 4 | - | 7 | 8 | - | err | - | - | | 5 | - | 2 | - | 1 | err | 9 | 4 | | 6 | - | 7 | 8 | - | err | - | 10 | | 7 | - | - | - | - | r2 | - | - | | 8 | - | - | - | - | r3 | - | - | | 9 | 5 | - | - | - | err | 3 | 4 | | 10 | - | - | - | - | r1 | - | - |
状态解释:
- 状态0:初始状态
- 状态1:接受状态,即语法分析成功
- 状态2:读入字符'b'的状态
- 状态3:读入字符'd'的状态
- 状态4:读入字符'a'的状态
- 状态5:读入字符'a'后进入A推导出的状态
- 状态6:读入字符'B'的状态
- 状态7:读入字符'c'的状态
- 状态8:读入字符'b'的状态
- 状态9:读入字符'd'后进入A推导出的状态
- 状态10:读入字符'B'后进入推导出E的状态
状态转移说明:
-
状态0:
- 读入'a',无法进行推导,转移失败
- 读入'b',转移到状态2
- 读入'c',无法进行推导,转移失败
- 读入'd',转移到状态1
- 读入'$',转移失败(需要进行规约)
- 读入'A',转移到状态3
- 读入'B',转移到状态4
-
状态1:
- 无法进行推导,转移失败
-
状态2:
- 读入'a',无法进行推导,转移失败
- 读入'b',转移失败(需要进行规约)
- 读入'c',无法进行推导,转移失败
- 读入'd',无法进行推导,转移失败
- 读入'$',转移失败(需要进行规约)
- 读入'A',转移失败(需要进行规约)
- 读入'B',转移失败(需要进行规约)
-
状态3:
- 读入'a',转移到状态9
- 读入'b',无法进行推导,转移失败
- 读入'c',无法进行推导,转移失败
- 读入'd',无法进行推导,转移失败
- 读入'$',转移失败(需要进行规约)
- 读入'A',转移到状态3
- 读入'B',转移到状态4
-
状态4:
- 读入'a',转移到状态5
- 读入'b',转移到状态7
- 读入'c',转移到状态8
- 读入'd',无法进行推导,转移失败
- 读入'$',转移失败(需要进行规约)
- 读入'A',转移失败(需要进行规约)
- 读入'B',转移失败(需要进行规约)
-
状态5:
- 读入'a',无法进行推导,转移失败
- 读入'b',转移失败(需要进行规约)
- 读入'c',无法进行推导,转移失败
- 读入'd',转移到状态9
- 读入'$',转移失败(需要进行规约)
- 读入'A',转移到状态3
- 读入'B',转移到状态4
-
状态6:
- 读入'a',无法进行推导,转移失败
- 读入'b',转移到状态7
- 读入'c',转移到状态8
- 读入'd',无法进行推导,转移失败
- 读入'$',转移失败(需要进行规约)
- 读入'A',转移失败(需要进行规约)
- 读入'B',转移失败(需要进行规约)
-
状态7:
- 无法进行推导,转移失败
- 读入'b',转移失败(需要进行规约)
- 读入'c',无法进行推导,转移失败
- 读入'd',无法进行推导,转移失败
- 读入'$',转移失败(需要进行规约)
- 读入'A',转移失败(需要进行规约)
- 读入'B',转移失败(需要进行规约)
-
状态8:
- 无法进行推导,转移失败
- 读入'b',转移失败(需要进行规约)
- 读入'c',无法进行推导,转移失败
- 读入'd',无法进行推导,转移失败
- 读入'$',转移失败(需要进行规约)
- 读入'A',转移失败(需要进行规约)
- 读入'B',转移失败(需要进行规约)
-
状态9:
- 读入'a',无法进行推导,转移失败
- 读入'b',转移失败(需要进行规约)
- 读入'c',无法进行推导,转移失败
- 读入'd',无法进行推导,转移失败
- 读入'$',转移失败(需要进行规约)
- 读入'A',转移到状态3
- 读入'B',转移到状态4
-
状态10:
- 读入'a',无法进行推导,转移失败
- 读入'b',无法进行推导,转移失败
- 读入'c',无法进行推导,转移失败
- 读入'd',无法进行推导,转移失败
- 读入'$',转移成功(接受状态)
- 读入'A',转移失败(需要进行规约)
- 读入'B',转移失败(需要进行规约)
原文地址: https://www.cveoy.top/t/topic/opSd 著作权归作者所有。请勿转载和采集!