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

Scapyで作る・解析するパケット
Scapyで作る・解析するパケットScapyで作る・解析するパケット
Scapyで作る・解析するパケットTakaaki Hoyo
 
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとはTakuya Akiba
 
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)Kensuke Otsuki
 
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライドRe永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライドMasaki Hara
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門masayoshi takahashi
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造Takuya Akiba
 
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.kiki utagawa
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!Genya Murakami
 
Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)Masahiro Sakai
 
深さ優先探索による塗りつぶし
深さ優先探索による塗りつぶし深さ優先探索による塗りつぶし
深さ優先探索による塗りつぶしAtCoder Inc.
 
M5StackをRustで動かす
M5StackをRustで動かすM5StackをRustで動かす
M5StackをRustで動かすKenta IDA
 
圏論のモナドとHaskellのモナド
圏論のモナドとHaskellのモナド圏論のモナドとHaskellのモナド
圏論のモナドとHaskellのモナドYoshihiro Mizoguchi
 
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説Takateru Yamagishi
 
Visual Studio CodeでRを使う
Visual Studio CodeでRを使うVisual Studio CodeでRを使う
Visual Studio CodeでRを使うAtsushi Hayakawa
 
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解くshindannin
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14Ryo Suzuki
 

What's hot (20)

Scapyで作る・解析するパケット
Scapyで作る・解析するパケットScapyで作る・解析するパケット
Scapyで作る・解析するパケット
 
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは
 
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
 
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライドRe永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライド
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
 
フラグを愛でる
フラグを愛でるフラグを愛でる
フラグを愛でる
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
 
Rolling hash
Rolling hashRolling hash
Rolling hash
 
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
 
Convex Hull Trick
Convex Hull TrickConvex Hull Trick
Convex Hull Trick
 
動的計画法を極める!
動的計画法を極める!動的計画法を極める!
動的計画法を極める!
 
Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)
 
深さ優先探索による塗りつぶし
深さ優先探索による塗りつぶし深さ優先探索による塗りつぶし
深さ優先探索による塗りつぶし
 
M5StackをRustで動かす
M5StackをRustで動かすM5StackをRustで動かす
M5StackをRustで動かす
 
圏論のモナドとHaskellのモナド
圏論のモナドとHaskellのモナド圏論のモナドとHaskellのモナド
圏論のモナドとHaskellのモナド
 
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説
 
Visual Studio CodeでRを使う
Visual Studio CodeでRを使うVisual Studio CodeでRを使う
Visual Studio CodeでRを使う
 
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
 

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

%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
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...masabamasaba
 
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
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdfPearlKirahMaeRagusta1
 
%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
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplatePresentation.STUDIO
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...masabamasaba
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrandmasabamasaba
 
tonesoftg
tonesoftgtonesoftg
tonesoftglanshi9
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT  - Elevating Productivity in Today's Agile EnvironmentHarnessing ChatGPT  - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT - Elevating Productivity in Today's Agile EnvironmentVictorSzoltysek
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyviewmasabamasaba
 
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
 
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
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastPapp Krisztián
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park masabamasaba
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2
 

Recently uploaded (20)

%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...
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
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
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
%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
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
tonesoftg
tonesoftgtonesoftg
tonesoftg
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT  - Elevating Productivity in Today's Agile EnvironmentHarnessing ChatGPT  - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 
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
 
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...
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 

LR parsing