文法G: E->E+T|T T->T*F|F F->i|(E) 用预测分析法分析的步骤如下: (1) 构造FIRST集和FOLLOW集
时间: 2024-02-16 19:01:20 浏览: 80
根据文法G,我们可以依次构造出FIRST集和FOLLOW集如下:
1. 构造FIRST集:
(1)对于非终结符号E:
- 如果E可以推导出空串,则把空串加入FIRST(E)
- 如果E可以推导出终结符号a,则把a加入FIRST(E)
- 如果E可以推导出非终结符号X,并且X的FIRST集合不包含空串,则把X的FIRST集合加入FIRST(E)
- 如果E可以推导出非终结符号X,并且X的FIRST集合包含空串,则把X的FIRST集合除去空串后再加入FIRST(E),并继续往下查看E的下一个符号。
依据上述规则,我们可以得到FIRST(E)={i, (}
(2)对于非终结符号T:
- 如果T可以推导出空串,则把空串加入FIRST(T)
- 如果T可以推导出终结符号a,则把a加入FIRST(T)
- 如果T可以推导出非终结符号X,并且X的FIRST集合不包含空串,则把X的FIRST集合加入FIRST(T)
- 如果T可以推导出非终结符号X,并且X的FIRST集合包含空串,则把X的FIRST集合除去空串后再加入FIRST(T),并继续往下查看T的下一个符号。
依据上述规则,我们可以得到FIRST(T)={i, (}
(3)对于非终结符号F:
- 如果F可以推导出终结符号i,则把i加入FIRST(F)
- 如果F可以推导出终结符号(,则把(加入FIRST(F))
- 如果F可以推导出非终结符号E,则把E的FIRST集合加入FIRST(F)
依据上述规则,我们可以得到FIRST(F)={i, (}
2. 构造FOLLOW集:
(1)对于非终结符号E:
- 把$符号加入FOLLOW(E)
- 如果存在A->αEβ的产生式,则把FIRST(β)中除去空串的符号加入FOLLOW(E)
- 如果存在A->αEβ的产生式,并且β可以推导出空串,则把FOLLOW(A)加入FOLLOW(E)
依据上述规则,我们可以得到FOLLOW(E)={$, +, )}
(2)对于非终结符号T:
- 如果存在A->αTβ的产生式,则把FIRST(β)中除去空串的符号加入FOLLOW(T)
- 如果存在A->αTβ的产生式,并且β可以推导出空串,则把FOLLOW(A)加入FOLLOW(T)
依据上述规则,我们可以得到FOLLOW(T)={$, +, *, )}
(3)对于非终结符号F:
- 如果存在A->αFβ的产生式,则把FIRST(β)中除去空串的符号加入FOLLOW(F)
- 如果存在A->αFβ的产生式,并且β可以推导出空串,则把FOLLOW(A)加入FOLLOW(F)
依据上述规则,我们可以得到FOLLOW(F)={$, +, *, )}
阅读全文