SlideShare ist ein Scribd-Unternehmen logo
1 von 198
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門natrium11321
 
ラムダ計算入門
ラムダ計算入門ラムダ計算入門
ラムダ計算入門Eita Sugimoto
 
Union find(素集合データ構造)
Union find(素集合データ構造)Union find(素集合データ構造)
Union find(素集合データ構造)AtCoder Inc.
 
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装MITSUNARI Shigeo
 
SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介MITSUNARI Shigeo
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
 
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介T. Suwa
 
動的計画法の並列化
動的計画法の並列化動的計画法の並列化
動的計画法の並列化Proktmr
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Preferred Networks
 
バイナリアンを目指して For a binaryen
バイナリアンを目指して For a binaryenバイナリアンを目指して For a binaryen
バイナリアンを目指して For a binaryenEyes, JAPAN
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safeKumazaki Hiroki
 
Constexpr 中3女子テクニック
Constexpr 中3女子テクニックConstexpr 中3女子テクニック
Constexpr 中3女子テクニックGenya Murakami
 
Javaバイトコード入門
Javaバイトコード入門Javaバイトコード入門
Javaバイトコード入門Kota Mizushima
 
Quine・難解プログラミングについて
Quine・難解プログラミングについてQuine・難解プログラミングについて
Quine・難解プログラミングについてmametter
 
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解くshindannin
 
katagaitai CTF勉強会 #3 crypto
katagaitai CTF勉強会 #3 cryptokatagaitai CTF勉強会 #3 crypto
katagaitai CTF勉強会 #3 cryptotrmr
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界Preferred Networks
 

Was ist angesagt? (20)

競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
 
Glibc malloc internal
Glibc malloc internalGlibc malloc internal
Glibc malloc internal
 
ラムダ計算入門
ラムダ計算入門ラムダ計算入門
ラムダ計算入門
 
Union find(素集合データ構造)
Union find(素集合データ構造)Union find(素集合データ構造)
Union find(素集合データ構造)
 
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
 
SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
PPL 2022 招待講演: 静的型つき函数型組版処理システムSATySFiの紹介
 
動的計画法の並列化
動的計画法の並列化動的計画法の並列化
動的計画法の並列化
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
 
バイナリアンを目指して For a binaryen
バイナリアンを目指して For a binaryenバイナリアンを目指して For a binaryen
バイナリアンを目指して For a binaryen
 
Marp Tutorial
Marp TutorialMarp Tutorial
Marp Tutorial
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safe
 
Constexpr 中3女子テクニック
Constexpr 中3女子テクニックConstexpr 中3女子テクニック
Constexpr 中3女子テクニック
 
Javaバイトコード入門
Javaバイトコード入門Javaバイトコード入門
Javaバイトコード入門
 
Quine・難解プログラミングについて
Quine・難解プログラミングについてQuine・難解プログラミングについて
Quine・難解プログラミングについて
 
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
 
katagaitai CTF勉強会 #3 crypto
katagaitai CTF勉強会 #3 cryptokatagaitai CTF勉強会 #3 crypto
katagaitai CTF勉強会 #3 crypto
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界
 

Ähnlich wie LR parsing (20)

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
 
Advanced query optimization
Advanced query optimizationAdvanced query optimization
Advanced query optimization
 

Kürzlich hochgeladen

Clustering techniques data mining book ....
Clustering techniques data mining book ....Clustering techniques data mining book ....
Clustering techniques data mining book ....ShaimaaMohamedGalal
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantAxelRicardoTrocheRiq
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AIABDERRAOUF MEHENNI
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsAndolasoft Inc
 
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
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
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
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
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
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 

Kürzlich hochgeladen (20)

Clustering techniques data mining book ....
Clustering techniques data mining book ....Clustering techniques data mining book ....
Clustering techniques data mining book ....
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
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
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
Exploring iOS App Development: Simplifying the Process
Exploring iOS App Development: Simplifying the ProcessExploring iOS App Development: Simplifying the Process
Exploring iOS App Development: Simplifying the Process
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
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...
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
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
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 

LR parsing