根据下面给出的语法创建LR(1)项并合并已给出LALR(1)项集的项集。我不确定如何从这个语法构建
B - > id | id(B)| B。 id | B [B] | B。 id(B)
到目前为止答案: i0- B' - > .B,$ | .id,$ | .id(B)
答案 0 :(得分:0)
以下是LRSTAR 8.0给出的LALR(1)项目集:
STATE MACHINE LISTING:
+=> Shift and goto next state.
+<= Shift and reduce.
<= Reduce.
///////////////////////////// STATE 0 /////////////////////////////
//
// * 0 G -> . B <eof>
2 <id> +=> 2
1 B +=> 1
///////////////////////////// STATE 1 /////////////////////////////
//
// * 0 G -> B . <eof>
// * 3 B -> B . '.' <id>
// * 4 B -> B . '[' B ']'
// * 5 B -> B . '.' <id> '(' B ')'
1 <eof> +=> 11
5 '.' +=> 3
6 '[' +=> 4
Came from: 0
///////////////////////////// STATE 2 /////////////////////////////
//
// * 1 B -> <id> .
// * 2 B -> <id> . '(' B ')'
3 '(' +=> 5
(default) <= 1
Came from: 0 4 5 9
///////////////////////////// STATE 3 /////////////////////////////
//
// * 3 B -> B '.' . <id>
// * 5 B -> B '.' . <id> '(' B ')'
2 <id> +=> 6
Came from: 1 7 8 10
///////////////////////////// STATE 4 /////////////////////////////
//
// * 4 B -> B '[' . B ']'
2 <id> +=> 2
1 B +=> 7
Came from: 1 7 8 10
///////////////////////////// STATE 5 /////////////////////////////
//
// * 2 B -> <id> '(' . B ')'
2 <id> +=> 2
1 B +=> 8
Came from: 2
///////////////////////////// STATE 6 /////////////////////////////
//
// * 3 B -> B '.' <id> .
// * 5 B -> B '.' <id> . '(' B ')'
3 '(' +=> 9
(default) <= 3
Came from: 3
///////////////////////////// STATE 7 /////////////////////////////
//
// * 3 B -> B . '.' <id>
// * 4 B -> B . '[' B ']'
// * 4 B -> B '[' B . ']'
// * 5 B -> B . '.' <id> '(' B ')'
5 '.' +=> 3
6 '[' +=> 4
7 ']' +<= 4
Came from: 4
///////////////////////////// STATE 8 /////////////////////////////
//
// * 2 B -> <id> '(' B . ')'
// * 3 B -> B . '.' <id>
// * 4 B -> B . '[' B ']'
// * 5 B -> B . '.' <id> '(' B ')'
4 ')' +<= 2
5 '.' +=> 3
6 '[' +=> 4
Came from: 5
///////////////////////////// STATE 9 /////////////////////////////
//
// * 5 B -> B '.' <id> '(' . B ')'
2 <id> +=> 2
1 B +=> 10
Came from: 6
///////////////////////////// STATE 10 /////////////////////////////
//
// * 3 B -> B . '.' <id>
// * 4 B -> B . '[' B ']'
// * 5 B -> B . '.' <id> '(' B ')'
// * 5 B -> B '.' <id> '(' B . ')'
5 '.' +=> 3
6 '[' +=> 4
4 ')' +<= 5
Came from: 9
///////////////////////////// STATE 11 /////////////////////////////
//
// * 0 G -> B <eof> .
(default) <= 0
Came from: 1
//
////////////////////////////////////////////////////////////////////
最小LR(1)的项目集是相同的。我不确定规范LR(1)项目的集合。 Canonical LR(1)解析器表不适用,除非语法很小。