我们之前意见写好了自动机,接下来用自动机来构建语法分析表。
语法分析表由两部分组成,一个语法分析动作函数ACTION和一个转换函数GOTO
- ACTION函数有两个参数:一个是状态i,另一个是终结符号a(或是输入标记符号$),ACTION[i,a]有四种形式:
- 移入j,j是一个状态
- 归约A->β
- 接受
- 报错
- 我们把定义在项集上的GOTO函数拓展为定义在状态集上的函数:如果GOTO[Ii,A] = Ii,那么GOTO也把状态i和一个非终结符号A映射到状态j。
构建表示,我们约定:
- si表示移入并将状态i压栈
- rj表示按照编号j的产生式归约
- acc表示接受
- 空白表示报错
示例文法:
E ——> E + T | T
T ——> T * F | F
F ——> ( E ) | id
构建自动机:
构建语法分析表:
构建算法: