作者lisztbach (liszt & bach)
看板C_and_CPP
标题Re: [徵求] 编译程式设计达人...高手...神人...
时间Wed Jan 10 09:08:59 2007
※ 引述《mosquito520 (卖频宽控制分享器)》之铭言:
: 4. 针对下面的文法建立其LR(1) Parsing Table
: 1. E -> E+T
: 2. E -> T
: 3. T -> T*F
: 4. T -> F
: 5. F -> (E)
: 6. F -> id
: 这个我同学说可能会写到干古....
我只会这一题
至於答案对不对
呵呵 您可能要检查过一次...或两次....^^"
E -> ‧E+T
E -> ‧T
T -> ‧T*F
T -> ‧F
F -> ‧(E)
F -> ‧id
State 0
E -> ‧E+T, {+};
E -> ‧T, {+};
T -> ‧T*F, {+*};
T -> ‧F, {+*};
F -> ‧(E), {+*};
F -> ‧id, {+*};
经由 E 到 State 1
经由 T 到 State 2
经由 F 到 State 3
经由 ( 到 State 4
经由 id 到 State 5
State 1
E -> E‧+T, {+};
经由 + 到 State 6
State 2
E -> T‧, {+};
T -> T‧*F, {+*};
经由 * 到 State 7
State 3
T -> F‧, {+*};
State 4
F -> (‧E), {+*};
E -> ‧E+T, {)+};
E -> ‧T, {)+};
T -> ‧T*F, {)+*};
T -> ‧F, {)+*};
F -> ‧(E), {)+*};
F -> ‧id, {)+*};
经由 E 到 State 8
经由 T 到 State 9
经由 F 到 State 10
经由 ( 到 State 11
经由 id 到 State 12
State 5
F -> id‧, {+*};
State 6
E -> E+‧T, {+};
T -> ‧T*F, {λ+*};
T -> ‧F, {λ+*};
F -> ‧(E), {λ+*};
F -> ‧id, {λ+*};
经由 T 到 State 13
经由 F 到 State 14
经由 ( 到 State 15
经由 id 到 State 16
State 7
T -> T*‧F, {+*};
F -> ‧(E), {+*};
F -> ‧id, {+*};
经由 F 到 State 17
经由 ( 到 State 4
经由 id 到 State 5
State 8
F -> (E‧), {+*};
E -> E‧+T, {)+};
经由 ) 到 State 18
经由 + 到 State 19
State 9
E -> T‧, {)+};
T -> T‧*F, {)+*};
经由 * 到 State 20
State 10
T -> F‧, {)+*};
State 11
F -> (‧E), {)+*};
E -> ‧E+T, {)+};
E -> ‧T, {)+};
T -> ‧T*F, {)+*};
T -> ‧F, {)+*};
F -> ‧(E), {)+*};
F -> ‧id, {)+*};
经由 E 到 State 21
经由 T 到 State 9
经由 F 到 State 10
经由 ( 到 State 11
经由 id 到 State 12
State 12
F -> id‧, {)+*};
State 13
E -> E+T‧, {+};
T -> T‧*F, {λ+*};
经由 * 到 State 22
State 14
T -> F‧, {λ+*};
State 15
F -> (‧E), {λ+*};
E -> ‧E+T, {)+};
E -> ‧T, {)+};
T -> ‧T*F, {)+*};
T -> ‧F, {)+*};
F -> ‧(E), {)+*};
F -> ‧id, {)+*};
经由 E 到 State 23
经由 T 到 State 9
经由 F 到 State 10
经由 ( 到 State 11
经由 id 到 State 12
State 16
F -> id‧, {λ+*};
State 17
T -> T*F‧, {+*};
State 18
F -> (E)‧, {+*};
State 19
E -> E+‧T, {)+};
T -> ‧T*F, {)+*};
T -> ‧F, {)+*};
F -> ‧(E), {)+*};
F -> ‧id, {)+*};
经由 T 到 State 24
经由 F 到 State 10
经由 ( 到 State 11
经由 id 到 State 12
State 20
T -> T*‧F, {)+*};
F -> ‧(E), {)+*};
F -> ‧id, {)+*};
经由 F 到 State 25
经由 ( 到 State 11
经由 id 到 State 12
State 21
F -> (E‧), {)+*};
E -> E‧+T, {)+};
经由 ) 到 State 26
经由 + 到 State 19
State 22
T -> T*‧F, {λ+*};
F -> ‧(E), {λ+*};
F -> ‧id, {λ+*};
经由 F 到 State 27
经由 ( 到 State 15
经由 id 到 State 16
State 23
F -> (E‧), {λ+*};
E -> E‧+T, {)+};
经由 ) 到 State 28
经由 + 到 State 19
State 24
E -> E+T‧, {)+};
T -> T‧*F, {)+*};
经由 * 到 State 20
State 25
T -> T*F‧, {)+*};
State 26
F -> (E)‧, {)+*};
State 27
T -> T*F‧, {λ+*};
State 28
F -> (E)‧, {λ+*};
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.62.97.25
1F:推 mosquito520:伪强者我同学说...好像对耶...XD 01/10 12:14
2F:→ mosquito520:不过前面在state0的地方似乎要加上augmented grammar. 01/10 12:15
3F:→ mosquito520:就是在E -> ‧E+T 前面加上E->‧E' 01/10 12:16
4F:→ mosquito520:顺便请教...你是用手工算?还是用程式跑啊? 01/10 12:17
5F:→ mosquito520:我在找资料的过程中有找到一些软体例如yacc之类的城市 01/10 12:17
6F:→ mosquito520:我有实际抓bison for windows下来跑...也有跑出结果 01/10 12:18
7F:→ mosquito520:不过我同学说那个跑出来的好像是LR(0)... 01/10 12:18
8F:→ mosquito520:所以想请教一下...谢谢...^^ 01/10 12:18
9F:推 final01:我们期末考也有考这种!期末考到了 01/10 15:50
10F:→ final01:yacc跑出来的是LALR.我想他是用手写的吧! 01/10 15:52
11F:推 lisztbach:我用自己写的程式跑的... 01/11 08:48
12F:→ lisztbach:因为期末 project 就是写一个 LR(1) 的 parser 01/11 08:48