根据文法(0)E'→E(1)E→E+T(2)E→T(3)T→T*F(4)T→F(5)F→(E)(6)F→id给出串id*id+id分析过程的状态栈,符号栈,输入串,动作,输出,格式为最右
时间: 2024-06-07 10:09:30 浏览: 31
推导过程如下:
初始状态:状态栈 [0],符号栈 [#],输入串 id*id+id#
1. 移进id,状态栈 [0, 1],符号栈 [#, id],输入串 *id+id#
2. 移进*,状态栈 [0, 1, 3],符号栈 [#, id, *],输入串 id+id#
3. 移进id,状态栈 [0, 1, 3, 1],符号栈 [#, id, *, id],输入串 +id#
4. 规约F→id,状态栈 [0, 1, 3],符号栈 [#, F],输入串 +id#
5. 规约T→F,状态栈 [0, 1],符号栈 [#, T],输入串 +id#
6. 移进+,状态栈 [0, 1, 2],符号栈 [#, T, +],输入串 id#
7. 移进id,状态栈 [0, 1, 2, 1],符号栈 [#, T, +, id],输入串 #
8. 规约F→id,状态栈 [0, 1, 2],符号栈 [#, T, +, F],输入串 #
9. 规约T→T*F,状态栈 [0, 1],符号栈 [#, T],输入串 #
10. 规约E→E+T,状态栈 [0],符号栈 [#, E],输入串 #
状态栈:[0]
符号栈:[#, E]
输入串:#
动作:规约E→E+T,规约T→T*F,规约F→id
输出:成功完成分析
相关问题
已知文法G(E) E→T|E+T T→F|T *F F→(E)|i 给出句型(T *F+i)的最左、最右推导
已知文法G(E)如下:
E → T | E + T
T → F | T * F
F → (E) | i
句型(T *F + i)的最左推导如下:
E → T
E → T * F
E → T * (E)
E → T * (T)
E → T * (F)
E → T * (i)
T → T * (i)
F → T * (i)
T → F * (i)
T → (E) * (i)
T → (T) * (i)
T → (F) * (i)
T → (i) * (i)
句型(T *F + i)的最右推导如下:
E → T
E → T * F
E → T * i
T → T * F
T → F * F
T → (E) * F
T → (T) * F
T → (F) * F
T → (i) * F
T → (i) * i
令文法g1为:e->e+t|t t->t*f|f
f->(e)|id
其中,e表示表达式,t表示项,f表示因子,id表示标识符。其中,*表示乘法运算符,( )表示括号。
该文法表示的是一个基本的算术表达式语言,其中包含加法和乘法运算符,并支持使用括号改变运算优先级。
例如,以下是一些合法的表达式:
1. 2+3
2. (2+3)*4
3. 2*(3+4)*5
4. 1+2*3
5. (1+2)*3
6. (1+2)*(3+4)
7. ((1+2)*(3+4)+5)*6
请注意,该文法中的终结符号包括:+, *, (, ), id,其中id表示标识符。