SlideShare a Scribd company logo
1 of 198
Download to read offline
LR構文解析
Kazuhiro Ichikawa
@phenan
1
目次
Ø  p.003 LR parsing
Ø  p.044 LR(0) 構文解析表
Ø  p.062 SLR(1) 構文解析表
Ø  p.105 LR(1) 構文解析表
Ø  p.134 LALR(1) 構文解析表
Ø  p.155 GLR parsing
2
LR parsing [Knuth 1965]
3
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
1 + 2 * 3入力
スタック
結果
LR parsing
4
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
1 + 2 * 3入力
スタック
結果
$ は入力の終端を表す
$
LR parsing
5
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
構文解析表
1 + 2 * 3入力
スタック
結果
構文解析表という表を
文法から作成して利用
(作り方は後述)
$
LR parsing
6
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
構文解析表
1 + 2 * 3入力
スタック
結果
スタックには最初0が
積まれている
0
$
LR parsing
7
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
構文解析表
1 + 2 * 3入力
スタック
結果
構文解析表から
スタックトップの行の
次の入力の列を見る
0
shift	3
$
LR parsing
8
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
構文解析表
+ 2 * 3入力
スタック
結果
shift は入力を一つ消費
して、指定された値を
プッシュ
0 3
shift	3
$
LR parsing
9
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
構文解析表
+ 2 * 3入力
スタック
結果
(トップ, 入力) を見る
0
reduce	4
3
$
LR parsing
10
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
構文解析表
+ 2 * 3入力
スタック
結果
reduce の操作(1)
指定された番号を結果
にメモする
0
reduce	4
4
3
$
LR parsing
11
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
構文解析表
+ 2 * 3入力
スタック
結果
reduce の操作(2)
指定された文法の右辺
の記号数だけポップ
0
reduce	4
4
$
LR parsing
12
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
構文解析表
+ 2 * 3入力
スタック
結果
reduce の操作(3)
(トップ, 文法の左辺) を
見る
0
reduce	4
4
go	to	2
$
LR parsing
13
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
構文解析表
+ 2 * 3入力
スタック
結果
reduce の操作(4)
(トップ, 文法の左辺) の
番号をプッシュ
0
reduce	4
4
go	to	2
2
$
LR parsing
14
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
構文解析表
+ 2 * 3入力
スタック
結果
(トップ, 入力)を見る
0
4
reduce	2
2
$
LR parsing
15
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
構文解析表
+ 2 * 3入力
スタック
結果
reduce:
結果にメモ
0
4
reduce	2
2
2
$
LR parsing
16
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
構文解析表
+ 2 * 3入力
スタック
結果
reduce:
右辺の個数ポップ
0
4
reduce	2
2
$
LR parsing
17
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
構文解析表
+ 2 * 3入力
スタック
結果
reduce:
(トップ, 左辺)を見る
0
4
reduce	2
2
go	to	1
$
LR parsing
18
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
構文解析表
+ 2 * 3入力
スタック
結果
reduce:
プッシュ
0
4
reduce	2
2
go	to	1
1
$
LR parsing
19
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
構文解析表
+ 2 * 3入力
スタック
結果
(トップ, 入力)
0
4
shift	4
2
1
$
LR parsing
20
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
構文解析表
2 * 3入力
スタック
結果
入力を消費して
プッシュ
0
4
shift	4
2
1 4
$
LR parsing
21
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
構文解析表
2 * 3入力
スタック
結果
(トップ, 入力)
0
4 2
1 4
shift	3
$
LR parsing
22
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
構文解析表
* 3入力
スタック
結果
入力を消費して
プッシュ
0
4 2
1 4
shift	3
3
$
LR parsing
23
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
構文解析表
* 3入力
スタック
結果
(トップ, 入力)
0
4 2
1 4
reduce	4
3
$
LR parsing
24
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
構文解析表
* 3入力
スタック
結果
reduce:
結果にメモ
0
4 2
1 4
reduce	4
4
3
$
LR parsing
25
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
構文解析表
* 3入力
スタック
結果
reduce:
右辺の個数ポップ
0
4 2
1 4
reduce	4
4
$
LR parsing
26
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
構文解析表
* 3入力
スタック
結果
reduce:
(トップ, 左辺)を
プッシュ
0
4 2
1 4
reduce	4
4
go	to	6
6
$
LR parsing
27
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
構文解析表
* 3入力
スタック
結果
(トップ, 入力)
0
4 2
1 4
shift	5
4
6
$
LR parsing
28
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
構文解析表
3入力
スタック
結果
入力消費、プッシュ
0
4 2
1 4
shift	5
4
6 5
$
LR parsing
29
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
構文解析表
3入力
スタック
結果
(トップ, 入力)
0
4 2
1 4
shift	7
4
6 5
$
LR parsing
30
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
構文解析表
入力
スタック
結果
0
4 2
1 4
shift	7
4
6 5
入力消費、プッシュ
7
$
LR parsing
31
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
構文解析表
入力
スタック
結果
0
4 2
1 4
reduce	3
4
6 5
(トップ, 入力)
7
$
LR parsing
32
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
構文解析表
入力
スタック
結果
0
4 2
1 4
reduce	3
4
6 5 reduce:
結果にメモ
7
$
3
LR parsing
33
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
構文解析表
入力
スタック
結果
0
4 2
1 4
reduce	3
4
reduce:
右辺の記号数ポップ
$
3
LR parsing
34
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
構文解析表
入力
スタック
結果
0
4 2
1 4
reduce	3
4
reduce:
(トップ, 左辺)を
プッシュ
$
3
6
go	to	6
LR parsing
35
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
構文解析表
入力
スタック
結果
0
4 2
1 4
reduce	1
4
(トップ, 入力)
$
3
6
LR parsing
36
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
構文解析表
入力
スタック
結果
0
4 2
1 4
reduce	1
4
reduce:
メモ
$
3
6
1
LR parsing
37
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
構文解析表
入力
スタック
結果
0
4 2
reduce	1
4
reduce:
右辺の数だけポップ
$
3 1
LR parsing
38
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
構文解析表
入力
スタック
結果
0
4 2
reduce	1
4
reduce:
(トップ, 左辺)を
プッシュ
$
3 1
go	to	1
1
LR parsing
39
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
構文解析表
入力
スタック
結果
0
4 2 4
(トップ, 入力)
$
3 1
1
accept!
LR parsing
40
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
構文解析表
入力
スタック
結果
0
4 2 4
accept !
$
3 1
1
accept!
LR parsing
41
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
4
2
4
3
1
1 + 2 * 3
結果 4 2 4 3 1
LR parsing まとめ
雑なアルゴリズム
1.  構文解析表のスタックトップ行入力列を見る
2.  shift n なら入力を消費してスタックに n をプッシュ
3.  reduce n なら n を結果にメモして以下の還元操作を行う
a)  n番目の構文規則を見る
b)  右辺の記号数だけスタックからポップ
c)  構文解析表のスタックトップ行左辺の記号列の値をプッシュ
4.  accept なら終了
42
構文解析表
作り方によって受理文法が変わる
•  LR(0) : 最も単純だが非実用的
•  SLR(1) : 単純だが受理文法が小さい
•  LR(1) : 受理文法が大きいが表が肥大化しやすい
•  LALR(1) : 受理文法がLR(1)より少し小さいが実用的
43
LR(0) 構文解析表
44
文法
1.  E	→	E	+	Num	
2.  E	→	E	*	Num	
3.  E	→	Num
LR(0)構文解析表
前の文法はLR(0)では
扱えないので、
少し違う文法を使う
LR(0) 構文解析表
45
文法
0.	S	→	E	
1.  E	→	E	+	Num	
2.  E	→	E	*	Num	
3.  E	→	Num
LR(0)構文解析表
終了判定を1つにするた
めに文法を1つ増やす
LR(0) 構文解析表
46
文法
0.	S	→	E	
1.  E	→	E	+	Num	
2.  E	→	E	*	Num	
3.  E	→	Num
LR(0)アイテム
LR(0)アイテム集合
LR(0)オートマトン
LR(0)構文解析表
難しそうに見えるけど、
そんなことはない
LR(0)アイテム
47
E	→	E	+	Num	
	
	
	
S	→	E	 E	→	E	*	Num	
	
	
	
E	→	Num
LR(0)アイテム
48
E	→	·	E	+	Num	
E	→	E	·	+	Num	
E	→	E	+	·	Num	
E	→	E	+	Num	·	
S	→	·	E	
S	→	E	·	
E	→	·	E	*	Num	
E	→	E	·	*	Num	
E	→	E	*	·	Num	
E	→	E	*	Num	·	
E	→	·	Num	
E	→	Num	·	
現在の場所に点を打つ
ようなイメージ
LR(0)アイテム集合
49
S	→	·	E	
I0
追加した規則のLR(0)
アイテム S → ・E か
ら始める
50
S	→	·	E	
E	→	·	E	+	Num	
E	→	·	E	*	Num	
E	→	·	Num	
I0
・が非終端記号Xの前
にあるときは、
X → ・w (wは任意)
を同じ集合に追加
LR(0)アイテム集合
LR(0)アイテム集合
51
S	→	·	E	
E	→	·	E	+	Num	
E	→	·	E	*	Num	
E	→	·	Num	
I0
・を1つ進めた場合を
考える
S	→	E	·	
E	→	E	·	+	Num	
E	→	E	·	*	Num	
I1
E	→	Num	·	
I2
Num
E
LR(0)アイテム集合
52
S	→	·	E	
E	→	·	E	+	Num	
E	→	·	E	*	Num	
E	→	·	Num	
I0
・を1つ進める
S	→	E	·	
E	→	E	·	+	Num	
E	→	E	·	*	Num	
I1
E	→	Num	·	
I2
Num
E
E	→	E	*	·	Num	
I4
*
E	→	E	+	·	Num	
I3
+
LR(0)アイテム集合
53
S	→	·	E	
E	→	·	E	+	Num	
E	→	·	E	*	Num	
E	→	·	Num	
I0
・を1つ (ry
S	→	E	·	
E	→	E	·	+	Num	
E	→	E	·	*	Num	
I1
E	→	Num	·	
I2
Num
E
E	→	E	*	·	Num	
I4
*
E	→	E	+	·	Num	
I3
+
E	→	E	*	Num	·	
I6
Num
E	→	E	+	Num	·	
I5
Num
LR(0)オートマトン
54
I0
I2
I1
I4
I3 I5
I6
E
Num
+
*
Num
Num
LR(0)オートマトン
55
Num + * E
0 2 1
1 3 4
2
3 5
4 6
5
6
LR(0) 構文解析表
56
Num + * $ E
0 s2 1
1 s3 s4
2
3 s5
4 s6
5
6 入力の終端$の列を追加
終端記号の列と非終端
記号の列を分離し、
終端記号の方はshiftに
LR(0) 構文解析表
57
Num + * $ E
0 s2 1
1 s3 s4 acc
2
3 s5
4 s6
5
6
S → E ・
がある行の$列をaccに
S	→	E	·	
E	→	E	·	+	Num	
E	→	E	·	*	Num	
I1
LR(0) 構文解析表
58
Num + * $ E
0 s2 1
1 s3 s4 acc
2 r3 r3 r3 r3
3 s5
4 s6
5
6 S → E ・以外で・が
終端に来る場合、
reduce (文法の番号)
を全ての列に
E	→	Num	·	
I2
文法
1.  E	→	E	+	Num	
2.  E	→	E	*	Num	
3.  E	→	Num
LR(0) 構文解析表
59
Num + * $ E
0 s2 1
1 s3 s4 acc
2 r3 r3 r3 r3
3 s5
4 s6
5 r1 r1 r1 r1
6 S → E ・以外で・が
終端に来る場合、
reduce (文法の番号)
を全ての列に
文法
1.  E	→	E	+	Num	
2.  E	→	E	*	Num	
3.  E	→	Num
E	→	E	+	Num	·	
I5
LR(0) 構文解析表
60
Num + * $ E
0 s2 1
1 s3 s4 acc
2 r3 r3 r3 r3
3 s5
4 s6
5 r1 r1 r1 r1
6 r2 r2 r2 r2 S → E ・以外で・が
終端に来る場合、
reduce (文法の番号)
を全ての列に
1.  E	→	E	+	Num	
2.  E	→	E	*	Num	
3.  E	→	Num
E	→	E	*	Num	·	
I6
文法
LR(0) 構文解析表
61
Num + * $ E
0 s2 1
1 s3 s4 acc
2 r3 r3 r3 r3
3 s5
4 s6
5 r1 r1 r1 r1
6 r2 r2 r2 r2
完成!
SLR(1) 構文解析表 [DeRemer 1969]
62
文法
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
SLR(1)構文解析表
SLR(1) 構文解析表
63
文法
0.	S	→	E	
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
SLR(1)構文解析表
SLR(1) 構文解析表
64
文法
0.	S	→	E	
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
LR(0)オートマトン SLR(1)構文解析表
First集合
Follow集合
First集合
65
First集合 =
先頭に来る可能性のあ
る終端記号の集合
0.	S	→	E	
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
文法
First(S)	
	
	
First(E)	
	
	
First(T)
First集合
66
最初は空の集合
0.	S	→	E	
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
文法
First(S)	=	{}	
	
	
First(E)	=	{}	
	
	
First(T)	=	{}
First集合
67
左辺がその非終端記号
の規則の最初の記号を
見る
0.	S	→	E	
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
文法
First(S)	=	{}	
	
	
First(E)	=	{}	
	
	
First(T)	=		
		{}	+	First(T)	+	First(Num)
First集合
68
First(終端記号A) =
{ A }
0.	S	→	E	
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
文法
First(S)	=	{}	
	
	
First(E)	=	{}	
	
	
First(T)	=	{	Num	}
First集合
69
収束するまで繰り返す
0.	S	→	E	
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
文法
First(S)	=	{}	
	
	
First(E)	=		
		{}	+	First(E)	+	First(T)	
	
First(T)	=	{	Num	}
First集合
70
繰り返す
0.	S	→	E	
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
文法
First(S)	=	{}	
	
	
First(E)	=	{	Num	}	
	
	
First(T)	=	{	Num	}
First集合
71
繰り返す
0.	S	→	E	
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
文法
First(S)	=	{}	+	First(E)	
	
	
First(E)	=	{	Num	}	
	
	
First(T)	=	{	Num	}
First集合
72
終了
0.	S	→	E	
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
文法
First(S)	=	{	Num	}	
	
	
First(E)	=	{	Num	}	
	
	
First(T)	=	{	Num	}
Follow集合
73
Follow集合 =
次に来る可能性のある
終端記号の集合
First(S)	=	{	Num	}	
First(E)	=	{	Num	}	
First(T)	=	{	Num	}	
0.	S	→	E	
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
文法
Follow(S)	
	
	
Follow(E)	
	
	
Follow(T)	
First集合
Follow集合
74
とりあえず空集合
First(S)	=	{	Num	}	
First(E)	=	{	Num	}	
First(T)	=	{	Num	}	
0.	S	→	E	
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
文法
Follow(S)	=	{}	
	
	
Follow(E)	=	{}	
	
	
Follow(T)	=	{}	
First集合
Follow集合
75
開始記号SのFollow集
合に $ を追加
First(S)	=	{	Num	}	
First(E)	=	{	Num	}	
First(T)	=	{	Num	}	
0.	S	→	E	
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
文法
Follow(S)	=	{	$	}	
	
	
Follow(E)	=	{}	
	
	
Follow(T)	=	{}	
First集合
Follow集合
76
A → w B (wは任意) の
ような規則がある場合、
Follow(B) に
Follow(A) を追加
First(S)	=	{	Num	}	
First(E)	=	{	Num	}	
First(T)	=	{	Num	}	
0.	S	→	E	
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
文法
Follow(S)	=	{	$	}	
	
	
Follow(E)	=	{}	+	Follow(S)	
	
	
Follow(T)	=	{}	
First集合
Follow集合
77
ちなみに、
A → w B C (wは任意)
のような場合でも、
ε First(C) ならば
同じ操作を行う
First(S)	=	{	Num	}	
First(E)	=	{	Num	}	
First(T)	=	{	Num	}	
0.	S	→	E	
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
文法
Follow(S)	=	{	$	}	
	
	
Follow(E)	=	{	$	}	
	
	
Follow(T)	=	{}	
First集合
Follow集合
78
A → x B y (y ε) の
ような規則がある場合、
Follow(B) に First(y)
を追加
First(S)	=	{	Num	}	
First(E)	=	{	Num	}	
First(T)	=	{	Num	}	
0.	S	→	E	
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
文法
Follow(S)	=	{	$	}	
	
	
Follow(E)	=	{	$	}	+	First(+)	
	
	
Follow(T)	=	{}	
First集合
Follow集合
79
終端記号なので
First(+) = { + }
First(S)	=	{	Num	}	
First(E)	=	{	Num	}	
First(T)	=	{	Num	}	
0.	S	→	E	
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
文法
Follow(S)	=	{	$	}	
	
	
Follow(E)	=	{	+,	$	}	
	
	
Follow(T)	=	{}	
First集合
Follow集合
80
収束するまで繰り返す
First(S)	=	{	Num	}	
First(E)	=	{	Num	}	
First(T)	=	{	Num	}	
0.	S	→	E	
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
文法
Follow(S)	=	{	$	}	
	
	
Follow(E)	=	{	+,	$	}	
	
	
Follow(T)	=	{}	+	Follow(E)	
First集合
Follow集合
81
収束するまで繰り返す
First(S)	=	{	Num	}	
First(E)	=	{	Num	}	
First(T)	=	{	Num	}	
0.	S	→	E	
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
文法
Follow(S)	=	{	$	}	
	
	
Follow(E)	=	{	+,	$	}	
	
	
Follow(T)	=	{	+,	$	}	
First集合
Follow集合
82
収束するまで繰り返す
First(S)	=	{	Num	}	
First(E)	=	{	Num	}	
First(T)	=	{	Num	}	
0.	S	→	E	
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
文法
Follow(S)	=	{	$	}	
	
	
Follow(E)	=	{	+,	$	}	
	
	
Follow(T)	=		
		{	+,	$	}	+	First(*)	
First集合
Follow集合
83
収束するまで繰り返す
First(S)	=	{	Num	}	
First(E)	=	{	Num	}	
First(T)	=	{	Num	}	
0.	S	→	E	
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
文法
Follow(S)	=	{	$	}	
	
	
Follow(E)	=	{	+,	$	}	
	
	
Follow(T)	=	{	+,	*,	$	}	
First集合
Follow集合
84
終了!
First(S)	=	{	Num	}	
First(E)	=	{	Num	}	
First(T)	=	{	Num	}	
0.	S	→	E	
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
文法
Follow(S)	=	{	$	}	
	
	
Follow(E)	=	{	+,	$	}	
	
	
Follow(T)	=	{	+,	*,	$	}	
First集合
LR(0)アイテム集合
85
S	→	E	
E	→	E	+	T	
E	→	T		
T	→	T	*	Num	
T	→	Num
文法
S	→	·	E	
I0
2度目なので
巻きで
LR(0)アイテム集合
86
S	→	E	
E	→	E	+	T	
E	→	T		
T	→	T	*	Num	
T	→	Num
文法
S	→	·	E	
E	→	·	E	+	T	
E	→	·	T	
T	→	·	T	*	Num	
T	→	·	Num	
I0
S → · E より
E → · ... 追加
E → · T より
T → · ... 追加
LR(0)アイテム集合
87
S	→	E	
E	→	E	+	T	
E	→	T		
T	→	T	*	Num	
T	→	Num
文法
S	→	·	E	
E	→	·	E	+	T	
E	→	·	T	
T	→	·	T	*	Num	
T	→	·	Num	
I0
Num
T	→	Num	·	
I3
E
S	→	E	·	
E	→	E	·	+	T	
I1
E	→	T	·	
T	→	T	·	*	Num	
I2
T
1つ進める
LR(0)アイテム集合
88
S	→	E	
E	→	E	+	T	
E	→	T		
T	→	T	*	Num	
T	→	Num
文法
S	→	·	E	
E	→	·	E	+	T	
E	→	·	T	
T	→	·	T	*	Num	
T	→	·	Num	
I0
Num
T	→	Num	·	
I3
E
S	→	E	·	
E	→	E	·	+	T	
I1
E	→	T	·	
T	→	T	·	*	Num	
I2
+
E	→	E	+	·	T	
	
	
I4
T
T	→	T	*	·	Num	
I5
*
I1とI2を1つず
つ進める
LR(0)アイテム集合
89
S	→	E	
E	→	E	+	T	
E	→	T		
T	→	T	*	Num	
T	→	Num
文法
S	→	·	E	
E	→	·	E	+	T	
E	→	·	T	
T	→	·	T	*	Num	
T	→	·	Num	
I0
Num
T	→	Num	·	
I3
E
S	→	E	·	
E	→	E	·	+	T	
I1
E	→	T	·	
T	→	T	·	*	Num	
I2
+
E	→	E	+	·	T	
T	→	·	T	*	Num	
T	→	·	Num	
I4
T
T	→	T	*	·	Num	
I5
*
E → E + · T
より
T → · ... を追加
LR(0)アイテム集合
90
S	→	E	
E	→	E	+	T	
E	→	T		
T	→	T	*	Num	
T	→	Num
文法
S	→	·	E	
E	→	·	E	+	T	
E	→	·	T	
T	→	·	T	*	Num	
T	→	·	Num	
I0
Num
T	→	Num	·	
I3
E
S	→	E	·	
E	→	E	·	+	T	
I1
E	→	T	·	
T	→	T	·	*	Num	
I2
+
E	→	E	+	·	T	
T	→	·	T	*	Num	
T	→	·	Num	
I4
T
T	→	T	*	·	Num	
I5
E	→	E	+	T	·	
T	→	T	·	*	Num	
I6
Num
T*
I4を1つ進める
LR(0)アイテム集合
91
S	→	E	
E	→	E	+	T	
E	→	T		
T	→	T	*	Num	
T	→	Num
文法
S	→	·	E	
E	→	·	E	+	T	
E	→	·	T	
T	→	·	T	*	Num	
T	→	·	Num	
I0
Num
T	→	Num	·	
I3
E
S	→	E	·	
E	→	E	·	+	T	
I1
E	→	T	·	
T	→	T	·	*	Num	
I2
+
E	→	E	+	·	T	
T	→	·	T	*	Num	
T	→	·	Num	
I4
T
T	→	T	*	·	Num	
I5
E	→	E	+	T	·	
T	→	T	·	*	Num	
I6
Num
T* *
I6を進めてI5に
合流
LR(0)アイテム集合
92
S	→	E	
E	→	E	+	T	
E	→	T		
T	→	T	*	Num	
T	→	Num
文法
S	→	·	E	
E	→	·	E	+	T	
E	→	·	T	
T	→	·	T	*	Num	
T	→	·	Num	
I0
Num
T	→	Num	·	
I3
E
S	→	E	·	
E	→	E	·	+	T	
I1
E	→	T	·	
T	→	T	·	*	Num	
I2
+
E	→	E	+	·	T	
T	→	·	T	*	Num	
T	→	·	Num	
I4
T
T	→	T	*	·	Num	
I5
E	→	E	+	T	·	
T	→	T	·	*	Num	
I6
T	→	T	*	Num	·	
I7
Num
Num
T* *
I5を進めて
終了!
LR(0)オートマトン
93
Num + * E T
0 3 1 2
1 4
2 5
3
4 3 6
5 7
6 5
7
SLR(1) 構文解析表
94
Num + * $ E T
0 s3 1 2
1 s4
2 s5
3
4 s3 6
5 s7
6 s5
7
$ 列追加
終端記号の列はshiftに
SLR(1) 構文解析表
95
Num + * $ E T
0 s3 1 2
1 s4 acc
2 s5
3
4 s3 6
5 s7
6 s5
7
S → E · があるので
(1, $) に acc
S	→	E	·	
E	→	E	·	+	T	
I1
0.	S	→	E	
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
文法
SLR(1) 構文解析表
96
Num + * $ E T
0 s3 1 2
1 s4 acc
2 s5
3
4 s3 6
5 s7
6 r1 s5 r1
7
X → w · (w は任意) と
いう規則を含むとき、
Follow(X) に含まれる
終端記号の列にreduce
0.	S	→	E	
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
文法
E	→	E	+	T	·	
T	→	T	·	*	Num	
I6
Follow(E)	=	{	+,	$	}
SLR(1) 構文解析表
97
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3
4 s3 6
5 s7
6 r1 s5 r1
7
X → w · なら
Follow(X) に reduce
0.	S	→	E	
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
文法
Follow(E)	=	{	+,	$	}	
E	→	T	·	
T	→	T	·	*	Num	
I2
SLR(1) 構文解析表
98
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
0.	S	→	E	
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
文法
T	→	T	*	Num	·	
I7
Follow(T)	=	{	+,	*,	$	}	
X → w · なら
Follow(X) に reduce
SLR(1) 構文解析表
99
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
0.	S	→	E	
1.  E	→	E	+	T	
2.  E	→	T	
3.  T	→	T	*	Num	
4.  T	→	Num
文法
X → w · なら
Follow(X) に reduce
T	→	Num	·	
I3
Follow(T)	=	{	+,	*,	$	}
SLR(1) 構文解析表
100
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6
5 s7
6 r1 s5 r1
7 r3 r3 r3
完成!!
SLR(1) で扱えない文法
101
0.	S	→	A	
1.  A	→	E	=	E	
2.  A	→	Id	
3.  E	→	E	+	T	
4.  E	→	T	
5.  T	→	Num	
6.  T	→	Id
SLR(1) で扱えない文法
102
0.	S	→	A	
1.  A	→	E	=	E	
2.  A	→	Id	
3.  E	→	E	+	T	
4.  E	→	T	
5.  T	→	Num	
6.  T	→	Id
S	→	·	A	
A	→	·	E	=	E	
A	→	·	Id	
E	→	·	E	+	T	
E	→	·	T	
T	→	·	Num	
T	→	·	Id	
I0
A	→	Id	·	
T	→	Id	·	
I1
Id
SLR(1) で扱えない文法
103
0.	S	→	A	
1.  A	→	E	=	E	
2.  A	→	Id	
3.  E	→	E	+	T	
4.  E	→	T	
5.  T	→	Num	
6.  T	→	Id
S	→	·	A	
A	→	·	E	=	E	
A	→	·	Id	
E	→	·	E	+	T	
E	→	·	T	
T	→	·	Num	
T	→	·	Id	
I0
A	→	Id	·	
T	→	Id	·	
I1
Id
Follow(A)	=	{	$	}	
Follow(T)	=	{	+,	=,	$	}
SLR(1) で扱えない文法
104
0.	S	→	A	
1.  A	→	E	=	E	
2.  A	→	Id	
3.  E	→	E	+	T	
4.  E	→	T	
5.  T	→	Num	
6.  T	→	Id
S	→	·	A	
A	→	·	E	=	E	
A	→	·	Id	
E	→	·	E	+	T	
E	→	·	T	
T	→	·	Num	
T	→	·	Id	
I0
A	→	Id	·	
T	→	Id	·	
I1
Id
Follow(A)	=	{	$	}	
Follow(T)	=	{	+,	=,	$	}	
構文解析表の (1, $) で
reduce-reduce 衝突
LR(1) 構文解析表
105
LR(1)構文解析表
0.	S	→	A	
1.  A	→	E	=	E	
2.  A	→	Id	
3.  E	→	E	+	T	
4.  E	→	T	
5.  T	→	Num	
6.  T	→	Id
LR(1) 構文解析表
106
LR(1)構文解析表
First集合
LR(1)アイテム集合
LR(1)オートマトン
0.	S	→	A	
1.  A	→	E	=	E	
2.  A	→	Id	
3.  E	→	E	+	T	
4.  E	→	T	
5.  T	→	Num	
6.  T	→	Id
LR(1)アイテム
107
E	→	E	·	+	T	[	$	]	
先読み記号
A → x · y [ a ] は
A → x · y が現れるよ
うな場所で、
a Follow(A)
LR(1)アイテム
108
E	→	E	·	+	T	[	$	]	
	
E	→	E	·	+	T	[	+	]	
先読み記号だけが違う
LR(1)アイテムをひと
まとめにして扱う
	
E	→	E	·	+	T	[	+,	$	]
LR(1)アイテム集合
109
S	→	·	A	[	$	]	
I0
S	→	A	
A	→	E	=	E	
A	→	Id	
E	→	E	+	T	
E	→	T	
T	→	Num	
T	→	Id
開始規則のLR(1)アイ
テムから開始
先読み記号は $
LR(1)アイテム集合
110
S	→	·	A	[	$	]	
A	→	·	E	=	E	[	$	]	
A	→	·	Id	[	$	]	
I0
S	→	A	
A	→	E	=	E	
A	→	Id	
E	→	E	+	T	
E	→	T	
T	→	Num	
T	→	Id
LR(0)アイテム集合の
ときと基本的には同じ
LR(1)アイテム集合
111
S	→	·	A	[	$	]	
A	→	·	E	=	E	[	$	]	
A	→	·	Id	[	$	]	
E	→	·	E	+	T	[	=	]	
E	→	·	T	[	=	]	
I0
S	→	A	
A	→	E	=	E	
A	→	Id	
E	→	E	+	T	
E	→	T	
T	→	Num	
T	→	Id
P → x · Q y [ a ]
に対して、
Q → · w [ First(ya) ]
を追加する
First(=E$)
LR(1)アイテム集合
112
S	→	·	A	[	$	]	
A	→	·	E	=	E	[	$	]	
A	→	·	Id	[	$	]	
E	→	·	E	+	T	[	+,	=	]	
E	→	·	T	[	+,	=	]	
I0
S	→	A	
A	→	E	=	E	
A	→	Id	
E	→	E	+	T	
E	→	T	
T	→	Num	
T	→	Id
P → · P w [ a ] のよう
な場合でも、先読み記
号が異なるものが追加
されることがある
First(+T=)
LR(1)アイテム集合
113
S	→	·	A	[	$	]	
A	→	·	E	=	E	[	$	]	
A	→	·	Id	[	$	]	
E	→	·	E	+	T	[	+,	=	]	
E	→	·	T	[	+,	=	]	
T	→	·	Num	[	+,	=	]	
T	→	·	Id	[	+,	=	]	
I0
S	→	A	
A	→	E	=	E	
A	→	Id	
E	→	E	+	T	
E	→	T	
T	→	Num	
T	→	Id
First(+),	First(=)
追加されるアイテムが
なくなるまで
LR(1)アイテム集合
114
S	→	·	A	[	$	]	
A	→	·	E	=	E	[	$	]	
A	→	·	Id	[	$	]	
E	→	·	E	+	T	[	+,	=	]	
E	→	·	T	[	+,	=	]	
T	→	·	Num	[	+,	=	]	
T	→	·	Id	[	+,	=	]	
I0
S	→	A	·	[	$	]	 I1
A	→	E	·	=	E	[	$	]	
E	→	E	·	+	T	[	+,	=	]	
I2
A	→	Id	·	[	$	]	
T	→	Id	·	[	+,	=	]	
I3
E	→	T	·	[	+,	=	]	
I4
T	→	Num	·	[	+,	=	]	I5
S	→	A	
A	→	E	=	E	
A	→	Id	
E	→	E	+	T	
E	→	T	
T	→	Num	
T	→	Id
I0から・を1つ進める
LR(1)アイテム集合
115
S	→	·	A	[	$	]	
A	→	·	E	=	E	[	$	]	
A	→	·	Id	[	$	]	
E	→	·	E	+	T	[	+,	=	]	
E	→	·	T	[	+,	=	]	
T	→	·	Num	[	+,	=	]	
T	→	·	Id	[	+,	=	]	
I0
S	→	A	·	[	$	]	 I1
A	→	E	·	=	E	[	$	]	
E	→	E	·	+	T	[	+,	=	]	
I2
A	→	Id	·	[	$	]	
T	→	Id	·	[	+,	=	]	
I3
E	→	T	·	[	+,	=	]	
I4
T	→	Num	·	[	+,	=	]	I5
S	→	A	
A	→	E	=	E	
A	→	Id	
E	→	E	+	T	
E	→	T	
T	→	Num	
T	→	Id
I2から
・を1つ進める
A	→	E	=	·	E	[	$	]	
	
I6
E	→	E	+	·	T	[	+,	=	]	
	
I7
LR(1)アイテム集合
116
S	→	·	A	[	$	]	
A	→	·	E	=	E	[	$	]	
A	→	·	Id	[	$	]	
E	→	·	E	+	T	[	+,	=	]	
E	→	·	T	[	+,	=	]	
T	→	·	Num	[	+,	=	]	
T	→	·	Id	[	+,	=	]	
I0
S	→	A	·	[	$	]	 I1
A	→	E	·	=	E	[	$	]	
E	→	E	·	+	T	[	+,	=	]	
I2
A	→	Id	·	[	$	]	
T	→	Id	·	[	+,	=	]	
I3
E	→	T	·	[	+,	=	]	
I4
T	→	Num	·	[	+,	=	]	I5
S	→	A	
A	→	E	=	E	
A	→	Id	
E	→	E	+	T	
E	→	T	
T	→	Num	
T	→	Id
非終端記号の前に	
·	があるので、ア
イテムを追加
A	→	E	=	·	E	[	$	]	
E	→	·	E	+	T	[	+,	$	]	
E	→	·	T	[	+,	$	]	
T	→	·	Num	[	+,	$	]	
T	→	·	Id	[	+,	$	]	
	
I6
E	→	E	+	·	T	[	+,	=	]	
T	→	·	Num	[	+,	=	]	
T	→	·	Id	[	+,	=	]	
	 I7
LR(1)アイテム集合
117
S	→	·	A	[	$	]	
A	→	·	E	=	E	[	$	]	
A	→	·	Id	[	$	]	
E	→	·	E	+	T	[	+,	=	]	
E	→	·	T	[	+,	=	]	
T	→	·	Num	[	+,	=	]	
T	→	·	Id	[	+,	=	]	
I0
S	→	A	·	[	$	]	 I1
A	→	E	·	=	E	[	$	]	
E	→	E	·	+	T	[	+,	=	]	
I2
A	→	Id	·	[	$	]	
T	→	Id	·	[	+,	=	]	
I3
E	→	T	·	[	+,	=	]	
I4
T	→	Num	·	[	+,	=	]	I5
S	→	A	
A	→	E	=	E	
A	→	Id	
E	→	E	+	T	
E	→	T	
T	→	Num	
T	→	Id
I6から
・を1つ進める
以下同様に、
収束するまで
A	→	E	=	·	E	[	$	]	
E	→	·	E	+	T	[	+,	$	]	
E	→	·	T	[	+,	$	]	
T	→	·	Num	[	+,	$	]	
T	→	·	Id	[	+,	$	]	
	
I6
E	→	E	+	·	T	[	+,	=	]	
T	→	·	Num	[	+,	=	]	
T	→	·	Id	[	+,	=	]	
	 I7
A	→	E	=	E	·	[	$	]	
E	→	E	·	+	T	[	+,	$	]	
I8
E	→	T	·	[	+,	$	]	
	 I9
T	→	Num	·	[	+,	$	]	
I10
T	→	Id	·	[	+,	$	]	
I11
LR(1)アイテム集合
118
S	→	·	A	[	$	]	
A	→	·	E	=	E	[	$	]	
A	→	·	Id	[	$	]	
E	→	·	E	+	T	[	+,	=	]	
E	→	·	T	[	+,	=	]	
T	→	·	Num	[	+,	=	]	
T	→	·	Id	[	+,	=	]	
I0
S	→	A	·	[	$	]	 I1
A	→	E	·	=	E	[	$	]	
E	→	E	·	+	T	[	+,	=	]	
I2
A	→	Id	·	[	$	]	
T	→	Id	·	[	+,	=	]	
I3
E	→	T	·	[	+,	=	]	
I4
T	→	Num	·	[	+,	=	]	I5
A	→	E	=	·	E	[	$	]	
E	→	·	E	+	T	[	+,	$	]	
E	→	·	T	[	+,	$	]	
T	→	·	Num	[	+,	$	]	
T	→	·	Id	[	+,	$	]	
	
I6
E	→	E	+	·	T	[	+,	=	]	
T	→	·	Num	[	+,	=	]	
T	→	·	Id	[	+,	=	]	
	 I7
S	→	A	
A	→	E	=	E	
A	→	Id	
E	→	E	+	T	
E	→	T	
T	→	Num	
T	→	Id
A	→	E	=	E	·	[	$	]	
E	→	E	·	+	T	[	+,	$	]	
I8
E	→	T	·	[	+,	$	]	
	 I9
T	→	Num	·	[	+,	$	]	
I10
T	→	Id	·	[	+,	$	]	
I11
E	→	E	+	T	·	[	+,	=	]	
	 I12
E	→	E	+	·	T	[	+,	$	]	
T	→	·	Num	[	+,	$	]	
T	→	·	Id	[	+,	$	]	
	
E	→	E	+	T	·	[	+,	$	]	
	 I15
I14
T	→	Id	·	[	+,	=	]	
I13
LR(1)オートマトン
119
I0
I5
I2
I1 I3 I4
I7
I6
I11I10
I9
I8
I13
I14I15
A
E
T
I12
Id
Num
=
+
E
T
Num Id
T
Id
Num
+
T
Num Id
120
Num Id + = A E T
0 5 3 1 2 4
1
2 7 6
3
4
5
6 10 11 8 9
7 5 13 12
8 14
9
10
11
12
13
14 10 11 15
15
LR(1) オートマトン
121
Num Id + = $ A E T
0 s5 s3 1 2 4
1
2 s7 s6
3
4
5
6 s10 s11 8 9
7 s5 s13 12
8 s14
9
10
11
12
13
14 s10 s11 15
15
LR(1) 構文解析表
122
Num Id + = $ A E T
0 s5 s3 1 2 4
1 acc
2 s7 s6
3
4
5
6 s10 s11 8 9
7 s5 s13 12
8 s14
9
10
11
12
13
14 s10 s11 15
15
LR(1) 構文解析表
S	→	A	·	[	$	]	 I1
S → w · [ $ ] があれ
ば $ 列に accept
	
1.  A	→	E	=	E	
2.  A	→	Id	
3.  E	→	E	+	T	
4.  E	→	T	
5.  T	→	Num	
6.  T	→	Id
123
Num Id + = $ A E T
0 s5 s3 1 2 4
1 acc
2 s7 s6
3 r6 r6 r2
4
5
6 s10 s11 8 9
7 s5 s13 12
8 s14
9
10
11
12
13
14 s10 s11 15
15
LR(1) 構文解析表
X → w · [ a ] なら
a 列に reduce
A	→	Id	·	[	$	]	
T	→	Id	·	[	+,	=	]	
I3
	
1.  A	→	E	=	E	
2.  A	→	Id	
3.  E	→	E	+	T	
4.  E	→	T	
5.  T	→	Num	
6.  T	→	Id
124
Num Id + = $ A E T
0 s5 s3 1 2 4
1 acc
2 s7 s6
3 r6 r6 r2
4 r4 r4
5
6 s10 s11 8 9
7 s5 s13 12
8 s14
9
10
11
12
13
14 s10 s11 15
15
LR(1) 構文解析表
X → w · [ a ] なら
a 列に reduce
	
1.  A	→	E	=	E	
2.  A	→	Id	
3.  E	→	E	+	T	
4.  E	→	T	
5.  T	→	Num	
6.  T	→	Id
E	→	T	·	[	+,	=	]	
I4
125
Num Id + = $ A E T
0 s5 s3 1 2 4
1 acc
2 s7 s6
3 r6 r6 r2
4 r4 r4
5 r5 r5
6 s10 s11 8 9
7 s5 s13 12
8 s14
9
10
11
12
13
14 s10 s11 15
15
LR(1) 構文解析表
X → w · [ a ] なら
a 列に reduce
	
1.  A	→	E	=	E	
2.  A	→	Id	
3.  E	→	E	+	T	
4.  E	→	T	
5.  T	→	Num	
6.  T	→	Id
T	→	Num	·	[	+,	=	]	I5
126
Num Id + = $ A E T
0 s5 s3 1 2 4
1 acc
2 s7 s6
3 r6 r6 r2
4 r4 r4
5 r5 r5
6 s10 s11 8 9
7 s5 s13 12
8 s14 r1
9
10
11
12
13
14 s10 s11 15
15
LR(1) 構文解析表
X → w · [ a ] なら
a 列に reduce
	
1.  A	→	E	=	E	
2.  A	→	Id	
3.  E	→	E	+	T	
4.  E	→	T	
5.  T	→	Num	
6.  T	→	Id
A	→	E	=	E	·	[	$	]	
E	→	E	·	+	T	[	+,	$	]	
I8
127
Num Id + = $ A E T
0 s5 s3 1 2 4
1 acc
2 s7 s6
3 r6 r6 r2
4 r4 r4
5 r5 r5
6 s10 s11 8 9
7 s5 s13 12
8 s14 r1
9 r4 r4
10
11
12
13
14 s10 s11 15
15
LR(1) 構文解析表
X → w · [ a ] なら
a 列に reduce
	
1.  A	→	E	=	E	
2.  A	→	Id	
3.  E	→	E	+	T	
4.  E	→	T	
5.  T	→	Num	
6.  T	→	Id
E	→	T	·	[	+,	$	]	
	 I9
128
Num Id + = $ A E T
0 s5 s3 1 2 4
1 acc
2 s7 s6
3 r6 r6 r2
4 r4 r4
5 r5 r5
6 s10 s11 8 9
7 s5 s13 12
8 s14 r1
9 r4 r4
10 r5 r5
11
12
13
14 s10 s11 15
15
LR(1) 構文解析表
X → w · [ a ] なら
a 列に reduce
	
1.  A	→	E	=	E	
2.  A	→	Id	
3.  E	→	E	+	T	
4.  E	→	T	
5.  T	→	Num	
6.  T	→	Id
T	→	Num	·	[	+,	$	]	
I10
129
Num Id + = $ A E T
0 s5 s3 1 2 4
1 acc
2 s7 s6
3 r6 r6 r2
4 r4 r4
5 r5 r5
6 s10 s11 8 9
7 s5 s13 12
8 s14 r1
9 r4 r4
10 r5 r5
11 r6 r6
12
13
14 s10 s11 15
15
LR(1) 構文解析表
X → w · [ a ] なら
a 列に reduce
	
1.  A	→	E	=	E	
2.  A	→	Id	
3.  E	→	E	+	T	
4.  E	→	T	
5.  T	→	Num	
6.  T	→	Id
T	→	Id	·	[	+,	$	]	
I11
130
Num Id + = $ A E T
0 s5 s3 1 2 4
1 acc
2 s7 s6
3 r6 r6 r2
4 r4 r4
5 r5 r5
6 s10 s11 8 9
7 s5 s13 12
8 s14 r1
9 r4 r4
10 r5 r5
11 r6 r6
12 r3 r3
13
14 s10 s11 15
15
LR(1) 構文解析表
X → w · [ a ] なら
a 列に reduce
	
1.  A	→	E	=	E	
2.  A	→	Id	
3.  E	→	E	+	T	
4.  E	→	T	
5.  T	→	Num	
6.  T	→	Id
E	→	E	+	T	·	[	+,	=	]	
	 I12
131
Num Id + = $ A E T
0 s5 s3 1 2 4
1 acc
2 s7 s6
3 r6 r6 r2
4 r4 r4
5 r5 r5
6 s10 s11 8 9
7 s5 s13 12
8 s14 r1
9 r4 r4
10 r5 r5
11 r6 r6
12 r3 r3
13 r6 r6
14 s10 s11 15
15
LR(1) 構文解析表
X → w · [ a ] なら
a 列に reduce
	
1.  A	→	E	=	E	
2.  A	→	Id	
3.  E	→	E	+	T	
4.  E	→	T	
5.  T	→	Num	
6.  T	→	Id
T	→	Id	·	[	+,	=	]	
I13
132
Num Id + = $ A E T
0 s5 s3 1 2 4
1 acc
2 s7 s6
3 r6 r6 r2
4 r4 r4
5 r5 r5
6 s10 s11 8 9
7 s5 s13 12
8 s14 r1
9 r4 r4
10 r5 r5
11 r6 r6
12 r3 r3
13 r6 r6
14 s10 s11 15
15 r3 r3
LR(1) 構文解析表
X → w · [ a ] なら
a 列に reduce
	
1.  A	→	E	=	E	
2.  A	→	Id	
3.  E	→	E	+	T	
4.  E	→	T	
5.  T	→	Num	
6.  T	→	Id
E	→	E	+	T	·	[	+,	$	]	
	 I15
133
Num Id + = $ A E T
0 s5 s3 1 2 4
1 acc
2 s7 s6
3 r6 r6 r2
4 r4 r4
5 r5 r5
6 s10 s11 8 9
7 s5 s13 12
8 s14 r1
9 r4 r4
10 r5 r5
11 r6 r6
12 r3 r3
13 r6 r6
14 s10 s11 15
15 r3 r3
LR(1) 構文解析表
完成!!!
LALR(1) 構文解析表 [DeRemer 1969]
134
LALR(1)構文解析表
0.	S	→	A	
1.  A	→	E	=	E	
2.  A	→	Id	
3.  E	→	E	+	T	
4.  E	→	T	
5.  T	→	Num	
6.  T	→	Id
LALR(1) 構文解析表
135
LALR(1)構文解析表
LR(1)アイテム集合
LALR(1)アイテム集合
LALR(1)オートマトン
0.	S	→	A	
1.  A	→	E	=	E	
2.  A	→	Id	
3.  E	→	E	+	T	
4.  E	→	T	
5.  T	→	Num	
6.  T	→	Id
LR(1)アイテム集合
136
S	→	·	A	[	$	]	
A	→	·	E	=	E	[	$	]	
A	→	·	Id	[	$	]	
E	→	·	E	+	T	[	+,	=	]	
E	→	·	T	[	+,	=	]	
T	→	·	Num	[	+,	=	]	
T	→	·	Id	[	+,	=	]	
I0
S	→	A	·	[	$	]	 I1
A	→	E	·	=	E	[	$	]	
E	→	E	·	+	T	[	+,	=	]	
I2
A	→	Id	·	[	$	]	
T	→	Id	·	[	+,	=	]	
I3
E	→	T	·	[	+,	=	]	
I4
T	→	Num	·	[	+,	=	]	I5
A	→	E	=	·	E	[	$	]	
E	→	·	E	+	T	[	+,	$	]	
E	→	·	T	[	+,	$	]	
T	→	·	Num	[	+,	$	]	
T	→	·	Id	[	+,	$	]	
	
I6
E	→	E	+	·	T	[	+,	=	]	
T	→	·	Num	[	+,	=	]	
T	→	·	Id	[	+,	=	]	
	 I7
A	→	E	=	E	·	[	$	]	
E	→	E	·	+	T	[	+,	$	]	
I8
E	→	T	·	[	+,	$	]	
	 I9
T	→	Num	·	[	+,	$	]	
I10
T	→	Id	·	[	+,	$	]	
I11
E	→	E	+	T	·	[	+,	=	]	
	 I12
E	→	E	+	·	T	[	+,	$	]	
T	→	·	Num	[	+,	$	]	
T	→	·	Id	[	+,	$	]	
	
E	→	E	+	T	·	[	+,	$	]	
	 I15
I14
T	→	Id	·	[	+,	=	]	
I13
LALR(1)アイテム集合
137
E	→	T	·	[	+,	=	]	
I4
E	→	T	·	[	+,	$	]	
	 I9
T	→	Num	·	[	+,	$	]	
I10
T	→	Id	·	[	+,	$	]	
I11
E	→	E	+	T	·	[	+,	=	]	
	 I12
E	→	E	+	·	T	[	+,	$	]	
T	→	·	Num	[	+,	$	]	
T	→	·	Id	[	+,	$	]	
	
E	→	E	+	T	·	[	+,	$	]	
	 I15
I14
T	→	Id	·	[	+,	=	]	
I13
先読み記号だけ違う
アイテム集合をまとめる
S	→	·	A	[	$	]	
A	→	·	E	=	E	[	$	]	
A	→	·	Id	[	$	]	
E	→	·	E	+	T	[	+,	=	]	
E	→	·	T	[	+,	=	]	
T	→	·	Num	[	+,	=	]	
T	→	·	Id	[	+,	=	]	
I0
S	→	A	·	[	$	]	 I1
A	→	E	·	=	E	[	$	]	
E	→	E	·	+	T	[	+,	=	]	
I2
A	→	Id	·	[	$	]	
T	→	Id	·	[	+,	=	]	
I3
T	→	Num	·	[	+,	=	]	I5
A	→	E	=	·	E	[	$	]	
E	→	·	E	+	T	[	+,	$	]	
E	→	·	T	[	+,	$	]	
T	→	·	Num	[	+,	$	]	
T	→	·	Id	[	+,	$	]	
	
I6
E	→	E	+	·	T	[	+,	=	]	
T	→	·	Num	[	+,	=	]	
T	→	·	Id	[	+,	=	]	
	 I7
A	→	E	=	E	·	[	$	]	
E	→	E	·	+	T	[	+,	$	]	
I8
LALR(1)アイテム集合
138
S	→	·	A	[	$	]	
A	→	·	E	=	E	[	$	]	
A	→	·	Id	[	$	]	
E	→	·	E	+	T	[	+,	=	]	
E	→	·	T	[	+,	=	]	
T	→	·	Num	[	+,	=	]	
T	→	·	Id	[	+,	=	]	
I0
S	→	A	·	[	$	]	 I1
A	→	E	·	=	E	[	$	]	
E	→	E	·	+	T	[	+,	=	]	
I2
A	→	Id	·	[	$	]	
T	→	Id	·	[	+,	=	]	
I3
E	→	T	·	[	+,	=,	$	]	
I16
T	→	Num	·	[	+,	=	]	I5
A	→	E	=	·	E	[	$	]	
E	→	·	E	+	T	[	+,	$	]	
E	→	·	T	[	+,	$	]	
T	→	·	Num	[	+,	$	]	
T	→	·	Id	[	+,	$	]	
	
I6
E	→	E	+	·	T	[	+,	=	]	
T	→	·	Num	[	+,	=	]	
T	→	·	Id	[	+,	=	]	
	 I7
A	→	E	=	E	·	[	$	]	
E	→	E	·	+	T	[	+,	$	]	
I8
T	→	Num	·	[	+,	$	]	
I10
T	→	Id	·	[	+,	$	]	
I11
E	→	E	+	T	·	[	+,	=	]	
	 I12
E	→	E	+	·	T	[	+,	$	]	
T	→	·	Num	[	+,	$	]	
T	→	·	Id	[	+,	$	]	
	
E	→	E	+	T	·	[	+,	$	]	
	 I15
I14
T	→	Id	·	[	+,	=	]	
I13
先読み記号だけ違う
アイテム集合をまとめる
LALR(1)アイテム集合
139
S	→	·	A	[	$	]	
A	→	·	E	=	E	[	$	]	
A	→	·	Id	[	$	]	
E	→	·	E	+	T	[	+,	=	]	
E	→	·	T	[	+,	=	]	
T	→	·	Num	[	+,	=	]	
T	→	·	Id	[	+,	=	]	
I0
S	→	A	·	[	$	]	 I1
A	→	E	·	=	E	[	$	]	
E	→	E	·	+	T	[	+,	=	]	
I2
A	→	Id	·	[	$	]	
T	→	Id	·	[	+,	=	]	
I3
E	→	T	·	[	+,	=,	$	]	
T	→	Num	·	[	+,	=	]	I5
A	→	E	=	·	E	[	$	]	
E	→	·	E	+	T	[	+,	$	]	
E	→	·	T	[	+,	$	]	
T	→	·	Num	[	+,	$	]	
T	→	·	Id	[	+,	$	]	
	
I6
E	→	E	+	·	T	[	+,	=	]	
T	→	·	Num	[	+,	=	]	
T	→	·	Id	[	+,	=	]	
	 I7
A	→	E	=	E	·	[	$	]	
E	→	E	·	+	T	[	+,	$	]	
I8
T	→	Num	·	[	+,	$	]	
I10
T	→	Id	·	[	+,	$	]	
I11
E	→	E	+	T	·	[	+,	=	]	
	 I12
E	→	E	+	·	T	[	+,	$	]	
T	→	·	Num	[	+,	$	]	
T	→	·	Id	[	+,	$	]	
	
E	→	E	+	T	·	[	+,	$	]	
	 I15
I14
T	→	Id	·	[	+,	=	]	
I13
先読み記号だけ違う
アイテム集合をまとめる
I16
LALR(1)アイテム集合
140
S	→	·	A	[	$	]	
A	→	·	E	=	E	[	$	]	
A	→	·	Id	[	$	]	
E	→	·	E	+	T	[	+,	=	]	
E	→	·	T	[	+,	=	]	
T	→	·	Num	[	+,	=	]	
T	→	·	Id	[	+,	=	]	
I0
S	→	A	·	[	$	]	 I1
A	→	E	·	=	E	[	$	]	
E	→	E	·	+	T	[	+,	=	]	
I2
A	→	Id	·	[	$	]	
T	→	Id	·	[	+,	=	]	
I3
E	→	T	·	[	+,	=,	$	]	
T	→	Num	·	[	+,	=,	$	]	 I17
A	→	E	=	·	E	[	$	]	
E	→	·	E	+	T	[	+,	$	]	
E	→	·	T	[	+,	$	]	
T	→	·	Num	[	+,	$	]	
T	→	·	Id	[	+,	$	]	
	
I6
E	→	E	+	·	T	[	+,	=	]	
T	→	·	Num	[	+,	=	]	
T	→	·	Id	[	+,	=	]	
	 I7
A	→	E	=	E	·	[	$	]	
E	→	E	·	+	T	[	+,	$	]	
I8
T	→	Id	·	[	+,	$	]	
I11
E	→	E	+	T	·	[	+,	=	]	
	 I12
E	→	E	+	·	T	[	+,	$	]	
T	→	·	Num	[	+,	$	]	
T	→	·	Id	[	+,	$	]	
	
E	→	E	+	T	·	[	+,	$	]	
	 I15
I14
T	→	Id	·	[	+,	=	]	
I13
先読み記号だけ違う
アイテム集合をまとめる
I16
LALR(1)アイテム集合
141
S	→	·	A	[	$	]	
A	→	·	E	=	E	[	$	]	
A	→	·	Id	[	$	]	
E	→	·	E	+	T	[	+,	=	]	
E	→	·	T	[	+,	=	]	
T	→	·	Num	[	+,	=	]	
T	→	·	Id	[	+,	=	]	
I0
S	→	A	·	[	$	]	 I1
A	→	E	·	=	E	[	$	]	
E	→	E	·	+	T	[	+,	=	]	
I2
A	→	Id	·	[	$	]	
T	→	Id	·	[	+,	=	]	
I3
E	→	T	·	[	+,	=,	$	]	
T	→	Num	·	[	+,	=,	$	]	
A	→	E	=	·	E	[	$	]	
E	→	·	E	+	T	[	+,	$	]	
E	→	·	T	[	+,	$	]	
T	→	·	Num	[	+,	$	]	
T	→	·	Id	[	+,	$	]	
	
I6
E	→	E	+	·	T	[	+,	=	]	
T	→	·	Num	[	+,	=	]	
T	→	·	Id	[	+,	=	]	
	 I7
A	→	E	=	E	·	[	$	]	
E	→	E	·	+	T	[	+,	$	]	
I8
T	→	Id	·	[	+,	$	]	
I11
E	→	E	+	T	·	[	+,	=	]	
	 I12
E	→	E	+	·	T	[	+,	$	]	
T	→	·	Num	[	+,	$	]	
T	→	·	Id	[	+,	$	]	
	
E	→	E	+	T	·	[	+,	$	]	
	 I15
I14
T	→	Id	·	[	+,	=	]	
I13
先読み記号だけ違う
アイテム集合をまとめる
I16
I17
LALR(1)アイテム集合
142
S	→	·	A	[	$	]	
A	→	·	E	=	E	[	$	]	
A	→	·	Id	[	$	]	
E	→	·	E	+	T	[	+,	=	]	
E	→	·	T	[	+,	=	]	
T	→	·	Num	[	+,	=	]	
T	→	·	Id	[	+,	=	]	
I0
S	→	A	·	[	$	]	 I1
A	→	E	·	=	E	[	$	]	
E	→	E	·	+	T	[	+,	=	]	
I2
A	→	Id	·	[	$	]	
T	→	Id	·	[	+,	=	]	
I3
E	→	T	·	[	+,	=,	$	]	
T	→	Num	·	[	+,	=,	$	]	
A	→	E	=	·	E	[	$	]	
E	→	·	E	+	T	[	+,	$	]	
E	→	·	T	[	+,	$	]	
T	→	·	Num	[	+,	$	]	
T	→	·	Id	[	+,	$	]	
	
I6
E	→	E	+	·	T	[	+,	=	]	
T	→	·	Num	[	+,	=	]	
T	→	·	Id	[	+,	=	]	
	 I7
A	→	E	=	E	·	[	$	]	
E	→	E	·	+	T	[	+,	$	]	
I8
T	→	Id	·	[	+,	=,	$	]	
I18
E	→	E	+	T	·	[	+,	=	]	
	 I12
E	→	E	+	·	T	[	+,	$	]	
T	→	·	Num	[	+,	$	]	
T	→	·	Id	[	+,	$	]	
	
E	→	E	+	T	·	[	+,	$	]	
	 I15
I14
先読み記号だけ違う
アイテム集合をまとめる
I16
I17
LALR(1)アイテム集合
143
S	→	·	A	[	$	]	
A	→	·	E	=	E	[	$	]	
A	→	·	Id	[	$	]	
E	→	·	E	+	T	[	+,	=	]	
E	→	·	T	[	+,	=	]	
T	→	·	Num	[	+,	=	]	
T	→	·	Id	[	+,	=	]	
I0
S	→	A	·	[	$	]	 I1
A	→	E	·	=	E	[	$	]	
E	→	E	·	+	T	[	+,	=	]	
I2
A	→	Id	·	[	$	]	
T	→	Id	·	[	+,	=	]	
I3
E	→	T	·	[	+,	=,	$	]	
T	→	Num	·	[	+,	=,	$	]	
A	→	E	=	·	E	[	$	]	
E	→	·	E	+	T	[	+,	$	]	
E	→	·	T	[	+,	$	]	
T	→	·	Num	[	+,	$	]	
T	→	·	Id	[	+,	$	]	
	
I6
E	→	E	+	·	T	[	+,	=	]	
T	→	·	Num	[	+,	=	]	
T	→	·	Id	[	+,	=	]	
	 I7
A	→	E	=	E	·	[	$	]	
E	→	E	·	+	T	[	+,	$	]	
I8
T	→	Id	·	[	+,	=,	$	]	
E	→	E	+	T	·	[	+,	=	]	
	 I12
E	→	E	+	·	T	[	+,	$	]	
T	→	·	Num	[	+,	$	]	
T	→	·	Id	[	+,	$	]	
	
E	→	E	+	T	·	[	+,	$	]	
	 I15
I14
先読み記号だけ違う
アイテム集合をまとめる
I16
I17
I18
LALR(1)アイテム集合
144
S	→	·	A	[	$	]	
A	→	·	E	=	E	[	$	]	
A	→	·	Id	[	$	]	
E	→	·	E	+	T	[	+,	=	]	
E	→	·	T	[	+,	=	]	
T	→	·	Num	[	+,	=	]	
T	→	·	Id	[	+,	=	]	
I0
S	→	A	·	[	$	]	 I1
A	→	E	·	=	E	[	$	]	
E	→	E	·	+	T	[	+,	=	]	
I2
A	→	Id	·	[	$	]	
T	→	Id	·	[	+,	=	]	
I3
E	→	T	·	[	+,	=,	$	]	
T	→	Num	·	[	+,	=,	$	]	
A	→	E	=	·	E	[	$	]	
E	→	·	E	+	T	[	+,	$	]	
E	→	·	T	[	+,	$	]	
T	→	·	Num	[	+,	$	]	
T	→	·	Id	[	+,	$	]	
	
I6
E	→	E	+	·	T	[	+,	=	]	
T	→	·	Num	[	+,	=	]	
T	→	·	Id	[	+,	=	]	
	 I7
A	→	E	=	E	·	[	$	]	
E	→	E	·	+	T	[	+,	$	]	
I8
T	→	Id	·	[	+,	=,	$	]	
E	→	E	+	T	·	[	+,	=,	$	]	
	 I19
E	→	E	+	·	T	[	+,	$	]	
T	→	·	Num	[	+,	$	]	
T	→	·	Id	[	+,	$	]	
	 I14
先読み記号だけ違う
アイテム集合をまとめる
I16
I17
I18
LALR(1)アイテム集合
145
S	→	·	A	[	$	]	
A	→	·	E	=	E	[	$	]	
A	→	·	Id	[	$	]	
E	→	·	E	+	T	[	+,	=	]	
E	→	·	T	[	+,	=	]	
T	→	·	Num	[	+,	=	]	
T	→	·	Id	[	+,	=	]	
I0
S	→	A	·	[	$	]	 I1
A	→	E	·	=	E	[	$	]	
E	→	E	·	+	T	[	+,	=	]	
I2
A	→	Id	·	[	$	]	
T	→	Id	·	[	+,	=	]	
I3
E	→	T	·	[	+,	=,	$	]	
T	→	Num	·	[	+,	=,	$	]	
A	→	E	=	·	E	[	$	]	
E	→	·	E	+	T	[	+,	$	]	
E	→	·	T	[	+,	$	]	
T	→	·	Num	[	+,	$	]	
T	→	·	Id	[	+,	$	]	
	
I6
E	→	E	+	·	T	[	+,	=	]	
T	→	·	Num	[	+,	=	]	
T	→	·	Id	[	+,	=	]	
	 I7
A	→	E	=	E	·	[	$	]	
E	→	E	·	+	T	[	+,	$	]	
I8
T	→	Id	·	[	+,	=,	$	]	
E	→	E	+	T	·	[	+,	=,	$	]	
	
E	→	E	+	·	T	[	+,	$	]	
T	→	·	Num	[	+,	$	]	
T	→	·	Id	[	+,	$	]	
	 I14
先読み記号だけ違う
アイテム集合をまとめる
I16
I17
I18
I19
LALR(1)アイテム集合
146
S	→	·	A	[	$	]	
A	→	·	E	=	E	[	$	]	
A	→	·	Id	[	$	]	
E	→	·	E	+	T	[	+,	=	]	
E	→	·	T	[	+,	=	]	
T	→	·	Num	[	+,	=	]	
T	→	·	Id	[	+,	=	]	
I0
S	→	A	·	[	$	]	 I1
A	→	E	·	=	E	[	$	]	
E	→	E	·	+	T	[	+,	=	]	
I2
A	→	Id	·	[	$	]	
T	→	Id	·	[	+,	=	]	
I3
E	→	T	·	[	+,	=,	$	]	
T	→	Num	·	[	+,	=,	$	]	
A	→	E	=	·	E	[	$	]	
E	→	·	E	+	T	[	+,	$	]	
E	→	·	T	[	+,	$	]	
T	→	·	Num	[	+,	$	]	
T	→	·	Id	[	+,	$	]	
	
I6
E	→	E	+	·	T	[	+,	=,	$	]	
T	→	·	Num	[	+,	=,	$	]	
T	→	·	Id	[	+,	=,	$	]	
	 I20
A	→	E	=	E	·	[	$	]	
E	→	E	·	+	T	[	+,	$	]	
I8
T	→	Id	·	[	+,	=,	$	]	
E	→	E	+	T	·	[	+,	=,	$	]	
	
先読み記号だけ違う
アイテム集合をまとめる
I16
I17
I18
I19
LALR(1)アイテム集合
147
S	→	·	A	[	$	]	
A	→	·	E	=	E	[	$	]	
A	→	·	Id	[	$	]	
E	→	·	E	+	T	[	+,	=	]	
E	→	·	T	[	+,	=	]	
T	→	·	Num	[	+,	=	]	
T	→	·	Id	[	+,	=	]	
I0
S	→	A	·	[	$	]	 I1
A	→	E	·	=	E	[	$	]	
E	→	E	·	+	T	[	+,	=	]	
I2
A	→	Id	·	[	$	]	
T	→	Id	·	[	+,	=	]	
I3
E	→	T	·	[	+,	=,	$	]	
T	→	Num	·	[	+,	=,	$	]	
A	→	E	=	·	E	[	$	]	
E	→	·	E	+	T	[	+,	$	]	
E	→	·	T	[	+,	$	]	
T	→	·	Num	[	+,	$	]	
T	→	·	Id	[	+,	$	]	
	
I6
E	→	E	+	·	T	[	+,	=,	$	]	
T	→	·	Num	[	+,	=,	$	]	
T	→	·	Id	[	+,	=,	$	]	
	
A	→	E	=	E	·	[	$	]	
E	→	E	·	+	T	[	+,	$	]	
I8
T	→	Id	·	[	+,	=,	$	]	
E	→	E	+	T	·	[	+,	=,	$	]	
	
先読み記号だけ違う
アイテム集合をまとめる
I16
I17
I18
I19
I20
LALR(1)オートマトン
148
I0
I17
I2
I1 I3 I16
I20
I6
I8
I18
A
E
T
I19
Id
Num
=
+
E
Num
Id
T
Id
Num
+
T
149
Num Id + = A E T
0 17 3 1 2 16
1
2 20 6
3
6 17 18 8 16
8 20
16
17
18
19
20 17 18 19
LALR(1)オートマトン
150
Num Id + = $ A E T
0 s17 s3 1 2 16
1
2 s20 s6
3
6 s17 s18 8 16
8 s20
16
17
18
19
20 s17 s18 19
LALR(1) 構文解析表
151
Num Id + = $ A E T
0 s17 s3 1 2 16
1 acc
2 s20 s6
3
6 s17 s18 8 16
8 s20
16
17
18
19
20 s17 s18 19
LALR(1) 構文解析表
S	→	A	·	[	$	]	 I1
あとはLR(1)と同じ
	
1.  A	→	E	=	E	
2.  A	→	Id	
3.  E	→	E	+	T	
4.  E	→	T	
5.  T	→	Num	
6.  T	→	Id
152
Num Id + = $ A E T
0 s17 s3 1 2 16
1 acc
2 s20 s6
3 r6 r6 r2
6 s17 s18 8 16
8 s20 r1
16
17
18
19
20 s17 s18 19
LALR(1) 構文解析表
	
1.  A	→	E	=	E	
2.  A	→	Id	
3.  E	→	E	+	T	
4.  E	→	T	
5.  T	→	Num	
6.  T	→	Id
A	→	Id	·	[	$	]	
T	→	Id	·	[	+,	=	]	
I3
A	→	E	=	E	·	[	$	]	
E	→	E	·	+	T	[	+,	$	]	
I8
153
Num Id + = $ A E T
0 s17 s3 1 2 16
1 acc
2 s20 s6
3 r6 r6 r2
6 s17 s18 8 16
8 s20 r1
16 r4 r4 r4
17 r5 r5 r5
18 r6 r6 r6
19 r3 r3 r3
20 s17 s18 19
LALR(1) 構文解析表
	
1.  A	→	E	=	E	
2.  A	→	Id	
3.  E	→	E	+	T	
4.  E	→	T	
5.  T	→	Num	
6.  T	→	Id
E	→	T	·	[	+,	=,	$	]	
I16
T	→	Num	·	[	+,	=,	$	]	
I17
T	→	Id	·	[	+,	=,	$	]	
E	→	E	+	T	·	[	+,	=,	$	]	
	
I18
I19
154
Num Id + = $ A E T
0 s17 s3 1 2 16
1 acc
2 s20 s6
3 r6 r6 r2
6 s17 s18 8 16
8 s20 r1
16 r4 r4 r4
17 r5 r5 r5
18 r6 r6 r6
19 r3 r3 r3
20 s17 s18 19
LALR(1) 構文解析表
完成!!!!
GLR parsing [Tomita 1985]
155
文法
1 + 2 * 3入力
LR parsing とは異な
り曖昧性を許す
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
* 4
1	+	((2	*	3)	*	4) 1	+	(2	*	(3	*	4))
$
GLR parsing
156
文法
GLRの構文解析表は
1つのマスに複数の
規則を許す
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
1 + 2 * 3入力 * 4 $
GLR parsing
157
文法
スタックの代わりに
グラフ構造スタック
(GSS)を利用する
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
DAG っぽいもの
1 + 2 * 3入力 * 4 $
GSS 0
GLR parsing
158
文法
結果は parse forest
(PF) という構造とし
て保持する
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
1 + 2 * 3入力 * 4 $
GSS 0
PF
GLR parsing
159
文法
基本はLRと同じ
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
shift 3
1 + 2 * 3入力 * 4 $
GSS 0
PF
GLR parsing
160
文法
入力を消費
スタックにプッシュする
代わりにエッジで繋ぐ
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
shift 3
+ 2 * 3入力 * 4 $
GSS 0 3
PF
GLR parsing
161
文法
エッジにラベルを付
けて、PFにメモを残
す
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
shift 3
+ 2 * 3入力 * 4 $
GSS 0 3
0
PF 	:Num 10
GLR parsing
162
文法
reduce もだいたい
LR と同様
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
reduce 4
+ 2 * 3入力 * 4 $
GSS 0 3
0
PF 	:Num 10
GLR parsing
163
文法
右辺の個数ポップ
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
go to 2
3
0
捨てる
+ 2 * 3入力 * 4 $
GSS 0
reduce 4
PF 	:Num 10
GLR parsing
164
文法
左辺の記号で go to
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
go to 2
+ 2 * 3入力 * 4 $
GSS 0 2
reduce 4
3
0
捨てる
PF 	:Num 10
GLR parsing
165
文法
エッジにラベルを付
けて、メモを残す
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
go to 2
捨てるラベル
+ 2 * 3入力 * 4 $
GSS 0 2
1
reduce 4
3
0
捨てる
PF 	:Num 10 	:T(		)1 0
GLR parsing
166
文法
同様に
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
reduce 2
+ 2 * 3入力 * 4 $
GSS 0 2
1
PF 	:Num 10 	:T(		)1 0
GLR parsing
167
文法
巻きで
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
go to 1
+ 2 * 3入力 * 4 $
GSS 0 1
2
reduce 2
PF 	:Num 10 	:T(		)1 0 	:E(		)2 1
GLR parsing
168
文法
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
shift 4
+ 2 * 3入力 * 4 $
GSS 0 1
2
PF 	:Num 10 	:T(		)1 0 	:E(		)2 1
GLR parsing
169
文法
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
2 * 3入力 * 4 $
GSS 0 1
2
4
3
shift 4
PF 	:Num 10 	:T(		)1 0 	:E(		)2 1 	:+3 +
GLR parsing
170
文法
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
shift 3
2 * 3入力 * 4 $
GSS 0 1
2
4
3
PF 	:Num 10 	:T(		)1 0 	:E(		)2 1 	:+3 +
GLR parsing
171
文法
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
shift 3
* 3入力 * 4 $
GSS 0 1
2
4
3
3
4
PF 	:Num 10 	:T(		)1 0 	:E(		)2 1 	:+3 	:Num4+ 2
GLR parsing
172
文法
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
reduce 4
* 3入力 * 4 $
GSS 0 1
2
4
3
3
4
PF 	:Num 10 	:T(		)1 0 	:E(		)2 1 	:+3 	:Num4+ 2
GLR parsing
173
文法
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
* 3入力 * 4 $
GSS 0 1
2
4
3
2
5
reduce 4
PF 	:Num 10 	:T(		)1 0 	:E(		)2 1 	:+3 	:Num4+ 2 	:T(		)5 4
GLR parsing
174
文法
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
GSS 0
PF
1
2
4
3
2
5
shift 5
* 3入力 * 4 $
	:Num 10 	:T(		)1 0 	:E(		)2 1 	:+3 	:Num4+ 2 	:T(		)5 4
GLR parsing
175
文法
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
GSS 0
PF
1
2
4
3
2
5
shift 5
3入力 * 4 $
5
6
	:Num 10 	:T(		)1 0 	:E(		)2 1 	:+3 	:Num4
	:*6
+ 2
*
	:T(		)5 4
GLR parsing
176
文法
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
GSS 0
PF
1
2
4
3
2
5
shift 3
3入力 * 4 $
5
6
	:Num 10 	:T(		)1 0 	:E(		)2 1 	:+3 	:Num4
	:*6
+ 2
*
	:T(		)5 4
GLR parsing
177
文法
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
GSS 0
PF
1
2
4
3
2
5
shift 3
入力 * 4 $
5
6
3
7
	:Num 10 	:T(		)1 0 	:E(		)2 1 	:+3 	:Num4+ 2 	:T(		)5 4
	:*6 	:Num7* 3
GLR parsing
178
文法
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
GSS 0
PF
1
2
4
3
2
5
reduce 4
入力 * 4 $
5
6
3
7
	:Num 10 	:T(		)1 0 	:E(		)2 1 	:+3 	:Num4
	:*6 	:Num7
+ 2
* 3
	:T(		)5 4
GLR parsing
179
文法
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
GSS 0
PF
1
2
4
3
2
5
reduce 4
入力 * 4 $
5
6
7
8
	:Num 10 	:T(		)1 0 	:E(		)2 1 	:+3 	:Num4
	:*6 	:Num7 	:T(		)8 7
+ 2
* 3
	:T(		)5 4
GLR parsing
180
文法
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
GSS 0
PF
1
2
4
3
2
5
入力 * 4 $
5
6
7
8
shift 5 or reduce 3
複数あるとき
は分岐
	:Num 10 	:T(		)1 0 	:E(		)2 1 	:+3 	:Num4
	:*6 	:Num7 	:T(		)8 7
+ 2
* 3
	:T(		)5 4
GLR parsing
181
文法
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
GSS 0
PF
1
2
4
3
2
5
入力 * 4 $
5
6
7
8
2
9
reduce 優先
shift 5 or reduce 3
	:Num 10 	:T(		)1 0 	:E(		)2 1 	:+3 	:Num4
	:*6 	:Num7 	:T(		)8 7 	:T(		,		,		)9 5 6 8
+ 2
* 3
	:T(		)5 4
GLR parsing
182
文法
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
GSS 0
PF
1
2
4
3
2
5
入力 * 4 $
5
6
7
8
2
9
shift 5
shift 5
同じになった
らまとめる
	:Num 10 	:T(		)1 0 	:E(		)2 1 	:+3 	:Num4
	:*6 	:Num7 	:T(		)8 7 	:T(		,		,		)9 5 6 8
+ 2
* 3
	:T(		)5 4
GLR parsing
183
文法
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
GSS 0
PF
1
2
4
3
2
5
入力 4 $
5
6
7
8
2
9
同じになった
らまとめる
shift 5
shift 5
5
10
	:Num 10 	:T(		)1 0 	:E(		)2 1 	:+3 	:Num4
	:*6 	:Num7 	:T(		)8 7 	:T(		,		,		)9 5 6 8 	:*10
+ 2
* 3 *
	:T(		)5 4
GLR parsing
184
文法
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
GSS 0
PF
1
2
4
3
2
5
入力 4 $
5
6
7
8
2
9
shift 3
5
10
	:Num 10 	:T(		)1 0 	:E(		)2 1 	:+3 	:Num4
	:*6 	:Num7 	:T(		)8 7 	:T(		,		,		)9 5 6 8 	:*10
+ 2
* 3 *
	:T(		)5 4
GLR parsing
185
文法
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
GSS 0
PF
1
2
4
3
2
5
入力 $
5
6
7
8
2
9
shift 3
5
10
3
11
	:Num 10 	:T(		)1 0 	:E(		)2 1 	:+3 	:Num4
	:*6 	:Num7 	:T(		)8 7 	:T(		,		,		)9 5 6 8 	:*10
+ 2
* 3 *
	:T(		)5 4
	:Num11 4
GLR parsing
186
文法
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
GSS 0
PF
1
2
4
3
2
5
入力 $
5
6
7
8
2
9
5
10
3
11
reduce 4
	:Num 10 	:T(		)1 0 	:E(		)2 1 	:+3 	:Num4
	:*6 	:Num7 	:T(		)8 7 	:T(		,		,		)9 5 6 8 	:*10
+ 2
* 3 *
	:T(		)5 4
	:Num11 4
GLR parsing
187
文法
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
GSS 0
PF
1
2
4
3
2
5
入力 $
5
6
7
8
2
9
5
10
7
12
reduce 4
	:Num 10 	:T(		)1 0 	:E(		)2 1 	:+3 	:Num4
	:*6 	:Num7 	:T(		)8 7 	:T(		,		,		)9 5 6 8 	:*10
	:T(		)12 11
+ 2
* 3 *
	:T(		)5 4
	:Num11 4
GLR parsing
188
文法
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
GSS 0
PF
1
2
4
3
2
5
入力 $
5
6
7
8
2
9
5
10
7
12
reduce 3
	:Num 10 	:T(		)1 0 	:E(		)2 1 	:+3 	:Num4
	:*6 	:Num7 	:T(		)8 7 	:T(		,		,		)9 5 6 8 	:*10
	:T(		)12 11
+ 2
* 3 *
	:T(		)5 4
	:Num11 4
GLR parsing
189
文法
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
GSS 0
PF
1
2
4
3
2
5
入力 $
5
6
7
13
2
14
reduce 3
	:Num 10 	:T(		)1 0 	:E(		)2 1 	:+3 	:Num4
	:*6 	:Num7 	:T(		)8 7 	:T(		,		,		)9 5 6 8 	:*10
	:T(		)12 11 	:T(		,		,		)13 8 10 12 	:T(		,		,		)14 9 10 12
+ 2
* 3 *
	:T(		)5 4
	:Num11 4
GLR parsing
190
文法
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
GSS
PF
入力 $ reduce 3
reduce 2
0 1
2
4
3
2
5
5
6
7
13
2
14
	:Num 10 	:T(		)1 0 	:E(		)2 1 	:+3 	:Num4
	:*6 	:Num7 	:T(		)8 7 	:T(		,		,		)9 5 6 8 	:*10
	:T(		)12 11 	:T(		,		,		)13 8 10 12 	:T(		,		,		)14 9 10 12
+ 2
* 3 *
	:T(		)5 4
	:Num11 4
GLR parsing
191
文法
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
GSS 0
PF
1
2
4
3
2
15
入力 $
6
16
reduce 3
reduce 2
	:Num 10 	:T(		)1 0 	:E(		)2 1 	:+3 	:Num4
	:*6 	:Num7 	:T(		)8 7 	:T(		,		,		)9 5 6 8 	:*10
	:T(		)12 11 	:T(		,		,		)13 8 10 12 	:T(		,		,		)14 9 10 12 	:T(		,		,		)15 5 6 13
	:E(		)16 14
+ 2
* 3 *
	:T(		)5 4
	:Num11 4
GLR parsing
192
文法
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
GSS 0
PF
1
2
4
3
2
15
入力 $
6
16
reduce 1
reduce 2
	:Num 10 	:T(		)1 0 	:E(		)2 1 	:+3 	:Num4
	:*6 	:Num7 	:T(		)8 7 	:T(		,		,		)9 5 6 8 	:*10
	:T(		)12 11 	:T(		,		,		)13 8 10 12 	:T(		,		,		)14 9 10 12 	:T(		,		,		)15 5 6 13
	:E(		)16 14
+ 2
* 3 *
	:T(		)5 4
	:Num11 4
GLR parsing
193
文法
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
GSS 0
PF
1
2
4
3
6
17
入力 $
reduce 1
reduce 2
1
18
	:Num 10 	:T(		)1 0 	:E(		)2 1 	:+3 	:Num4
	:*6 	:Num7 	:T(		)8 7 	:T(		,		,		)9 5 6 8 	:*10
	:T(		)12 11 	:T(		,		,		)13 8 10 12 	:T(		,		,		)14 9 10 12 	:T(		,		,		)15 5 6 13
	:E(		)16 14
+ 2
* 3 *
	:T(		)5 4
	:E(		)17 15 	:E(		,		,		)18 2 3 16
	:Num11 4
GLR parsing
194
文法
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
GSS 0
PF
1
2
4
3
6
17
入力 $
reduce 1
1
18
	:Num 10 	:T(		)1 0 	:E(		)2 1 	:+3 	:Num4
	:*6 	:Num7 	:T(		)8 7 	:T(		,		,		)9 5 6 8 	:*10
	:T(		)12 11 	:T(		,		,		)13 8 10 12 	:T(		,		,		)14 9 10 12 	:T(		,		,		)15 5 6 13
	:E(		)16 14
+ 2
* 3 *
	:T(		)5 4
	:E(		)17 15 	:E(		,		,		)18 2 3 16
	:Num11 4
GLR parsing
文法
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
GSS 0
PF
19
入力 $
reduce 1
1
18
	:Num 10 	:T(		)1 0 	:E(		)2 1 	:+3 	:Num4
	:*6 	:Num7 	:T(		)8 7 	:T(		,		,		)9 5 6 8 	:*10
	:T(		)12 11 	:T(		,		,		)13 8 10 12 	:T(		,		,		)14 9 10 12 	:T(		,		,		)15 5 6 13
	:E(		)16 14
+ 2
* 3 *
	:T(		)5 4
	:E(		)17 15 	:E(		,		,		)18 2 3 16 	:E(		,		,		)19 2 3 17
	:Num11 4
GLR parsing
文法
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
GSS
PF 	:Num 10 	:T(		)1 0 	:E(		)2 1 	:+3 	:Num4
入力 $
	:*6 	:Num7 	:T(		)8 7 	:T(		,		,		)9 5 6 8 	:*10
	:T(		)12 11 	:T(		,		,		)13 8 10 12 	:T(		,		,		)14 9 10 12 	:T(		,		,		)15 5 6 13
	:E(		)16 14
+ 2
* 3 *
	:T(		)5 4
	:E(		)17 15 	:E(		,		,		)18 2 3 16 	:E(		,		,		)19 2 3 17
	:Num11 4
0 1
20
	:			|20 18 19
パッキング:
タグだけ違う矢印を
マージ
GLR parsing
文法
1.  E	→	E	+	E	
2.  E	→	T	
3.  T	→	T	*	T	
4.  T	→	Num
Num + * $ E T
0 s3 1 2
1 s4 acc
2 r2 s5 r2
3 r4 r4 r4
4 s3 6 2
5 s3 7
6 s4/r1 r1
7 r3 s5/r3 r3
GSS
PF 	:Num 10 	:T(		)1 0 	:E(		)2 1 	:+3 	:Num4
入力 $
	:*6 	:Num7 	:T(		)8 7 	:T(		,		,		)9 5 6 8 	:*10
	:T(		)12 11
accept !
	:T(		,		,		)13 8 10 12 	:T(		,		,		)14 9 10 12 	:T(		,		,		)15 5 6 13
	:E(		)16 14
+ 2
* 3 *
	:T(		)5 4
	:E(		)17 15 	:E(		,		,		)18 2 3 16 	:E(		,		,		)19 2 3 17
	:Num11 4
0 1
20
	:			|20 18 19
GLR parsing まとめ
分岐を許す LR parsing
•  ありうる遷移を全て幅優先探索
•  reduce 優先
GSS: グラフ構造スタック
•  分岐後に合流を許すことで効率化
Parse forest
•  構文木全体を作らずにポインタで持つ
•  構文木の数が組み合わせ爆発するため
198

More Related Content

What's hot

クロージャデザインパターン
クロージャデザインパターンクロージャデザインパターン
クロージャデザインパターンMoriharu Ohzu
 
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~Takuya Akiba
 
ラムダ計算入門
ラムダ計算入門ラムダ計算入門
ラムダ計算入門Eita Sugimoto
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Preferred Networks
 
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回Tomoya Kawanishi
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性Hibiki Yamashiro
 
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門natrium11321
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろうKota Mizushima
 
論理と計算のしくみ 5.3 型付きλ計算 (前半)
論理と計算のしくみ 5.3 型付きλ計算 (前半)論理と計算のしくみ 5.3 型付きλ計算 (前半)
論理と計算のしくみ 5.3 型付きλ計算 (前半)Lintaro Ina
 
12 分くらいで知るLuaVM
12 分くらいで知るLuaVM12 分くらいで知るLuaVM
12 分くらいで知るLuaVMYuki Tamura
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
 
CRC-32
CRC-32CRC-32
CRC-327shi
 
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライドRe永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライドMasaki Hara
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!Genya Murakami
 
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会Akihiko Matuura
 
潜在ディリクレ配分法
潜在ディリクレ配分法潜在ディリクレ配分法
潜在ディリクレ配分法y-uti
 

What's hot (20)

Binary indexed tree
Binary indexed treeBinary indexed tree
Binary indexed tree
 
クロージャデザインパターン
クロージャデザインパターンクロージャデザインパターン
クロージャデザインパターン
 
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
 
ラムダ計算入門
ラムダ計算入門ラムダ計算入門
ラムダ計算入門
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
 
Marp Tutorial
Marp TutorialMarp Tutorial
Marp Tutorial
 
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回
 
llvm入門
llvm入門llvm入門
llvm入門
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
 
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
 
論理と計算のしくみ 5.3 型付きλ計算 (前半)
論理と計算のしくみ 5.3 型付きλ計算 (前半)論理と計算のしくみ 5.3 型付きλ計算 (前半)
論理と計算のしくみ 5.3 型付きλ計算 (前半)
 
12 分くらいで知るLuaVM
12 分くらいで知るLuaVM12 分くらいで知るLuaVM
12 分くらいで知るLuaVM
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
CRC-32
CRC-32CRC-32
CRC-32
 
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライドRe永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライド
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
 
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会
 
潜在ディリクレ配分法
潜在ディリクレ配分法潜在ディリクレ配分法
潜在ディリクレ配分法
 

Similar to LR parsing

Similar to LR parsing (20)

ch5-bottomupparser_jfdrhgfrfyyssf-gfrrt.PPT
ch5-bottomupparser_jfdrhgfrfyyssf-gfrrt.PPTch5-bottomupparser_jfdrhgfrfyyssf-gfrrt.PPT
ch5-bottomupparser_jfdrhgfrfyyssf-gfrrt.PPT
 
Bottomupparser
BottomupparserBottomupparser
Bottomupparser
 
Bottomupparser
BottomupparserBottomupparser
Bottomupparser
 
Bottomupparser
BottomupparserBottomupparser
Bottomupparser
 
Bottom up parser
Bottom up parserBottom up parser
Bottom up parser
 
Generating code from dags
Generating code from dagsGenerating code from dags
Generating code from dags
 
Lecture11 syntax analysis_7
Lecture11 syntax analysis_7Lecture11 syntax analysis_7
Lecture11 syntax analysis_7
 
LR(1) and SLR(1) parsing
LR(1) and SLR(1) parsingLR(1) and SLR(1) parsing
LR(1) and SLR(1) parsing
 
lr parsers bottom up parsers slr parser.pptx
lr parsers bottom up parsers slr parser.pptxlr parsers bottom up parsers slr parser.pptx
lr parsers bottom up parsers slr parser.pptx
 
LR-Parsing.ppt
LR-Parsing.pptLR-Parsing.ppt
LR-Parsing.ppt
 
Left factor put
Left factor putLeft factor put
Left factor put
 
15-CAT-2 answer key discussion-04-07-2023.pdf
15-CAT-2 answer key discussion-04-07-2023.pdf15-CAT-2 answer key discussion-04-07-2023.pdf
15-CAT-2 answer key discussion-04-07-2023.pdf
 
Ch06
Ch06Ch06
Ch06
 
Merge sort-algorithm for computer science engineering students
Merge sort-algorithm for computer science engineering studentsMerge sort-algorithm for computer science engineering students
Merge sort-algorithm for computer science engineering students
 
pradeepbishtLecture13 div conq
pradeepbishtLecture13 div conqpradeepbishtLecture13 div conq
pradeepbishtLecture13 div conq
 
Joins
JoinsJoins
Joins
 
compiler-lecture-6nn-14112022-110738am.ppt
compiler-lecture-6nn-14112022-110738am.pptcompiler-lecture-6nn-14112022-110738am.ppt
compiler-lecture-6nn-14112022-110738am.ppt
 
Merge sort algorithm power point presentation
Merge sort algorithm power point presentationMerge sort algorithm power point presentation
Merge sort algorithm power point presentation
 
Presentation(intermediate code generation)
Presentation(intermediate code generation)Presentation(intermediate code generation)
Presentation(intermediate code generation)
 
Mergesort
MergesortMergesort
Mergesort
 

Recently uploaded

Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfonteinmasabamasaba
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisamasabamasaba
 
Generic or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisionsGeneric or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisionsBert Jan Schrijver
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrainmasabamasaba
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is insideshinachiaurasa2
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech studentsHimanshiGarg82
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareJim McKeeth
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...SelfMade bd
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension AidPhilip Schwarz
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...Shane Coughlan
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
SHRMPro HRMS Software Solutions Presentation
SHRMPro HRMS Software Solutions PresentationSHRMPro HRMS Software Solutions Presentation
SHRMPro HRMS Software Solutions PresentationShrmpro
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfonteinmasabamasaba
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...masabamasaba
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park masabamasaba
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfVishalKumarJha10
 
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburgmasabamasaba
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 

Recently uploaded (20)

Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
Generic or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisionsGeneric or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisions
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
SHRMPro HRMS Software Solutions Presentation
SHRMPro HRMS Software Solutions PresentationSHRMPro HRMS Software Solutions Presentation
SHRMPro HRMS Software Solutions Presentation
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 

LR parsing