ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf ·...
TRANSCRIPT
![Page 1: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/1.jpg)
ビジュアル構文解析
Kazuhiro Ichikawa @phenan
1
![Page 2: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/2.jpg)
概要 • 様々な構文解析アルゴリズムを図解で紹介 Ø 古典的な手法から最近のものまで Ø "なんとなく理解できる" のを目指す
• スライド Ø www.csg.ci.i.u-tokyo.ac.jp/~ichikawa/visual_parsing.pdf Ø 重いのでダウンロード推奨
2
![Page 3: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/3.jpg)
3
演算子順位構文解析 Ø Shunting-yard algorithm Ø Pratt parsing
上向き構文解析 Ø LR parsing Ø GLR parsing Ø Earley parsing Ø CYK algorithm Ø Valiant parsing
下向き構文解析 Ø LL(k) parsing Ø Packrat parsing Ø Packrat parsing with left recursion Ø GLL parsing Ø Adaptive LL(*) parsing
紹介するアルゴリズム
![Page 4: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/4.jpg)
4
演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す Ø Pratt parsing 再帰下降型演算子順位構文解析
上向き構文解析 Ø LR parsing 決定性有限オートマトン Ø GLR parsing 非決定性有限オートマトン Ø Earley parsing 動的計画法 Ø CYK algorithm 動的計画法 Ø Valiant parsing 行列積
下向き構文解析 Ø LL(k) parsing k文字先読み Ø Packrat parsing メモ化再帰 Ø Packrat parsing with left recursion 強欲マッチ Ø GLL parsing グラフ構造継続 Ø Adaptive LL(*) parsing 先読みオートマトンの動的構築
紹介するアルゴリズム
![Page 5: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/5.jpg)
演算子順位構文解析 Operator precedence parsing
5
![Page 6: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/6.jpg)
6
Shunting-yard algorithm [Dijkstra 1961] • 最も簡単な上向き構文解析 • 数式の構文解析が得意
Pratt parsing [Pratt 1973] • 下向きの演算子順位構文解析 • 手書きの再帰下降構文解析器の一部として利用される • 数式の構文解析が得意
![Page 7: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/7.jpg)
Shunting-yard algorithm [Dijkstra 1961]
アイデア • 演算子優先度を使って後置記法に直す • スタックを使い優先度順に並べ替える
7
1
*
2
+
3 1 * 2 + 3
優先度
高
低
後置記法
1 2 * 3 +
中置記法
![Page 8: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/8.jpg)
8
1 2 + ( * 3 4 + ) 5
入力
$
スタック
$
出力
Num + * ( ) $ input 7 2 4 6 1 0 stack 7 3 5 1 0
*
![Page 9: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/9.jpg)
9
1 2 + ( * 3 4 + ) 5
入力
$
スタック
$
出力
高
低
Num + * ( ) $ input 7 2 4 6 1 0 stack 7 3 5 1 0
*
![Page 10: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/10.jpg)
10
1
2 + ( * 3 4 + ) 5
入力
$
スタック
$
出力
Num + * ( ) $ input 7 2 4 6 1 0 stack 7 3 5 1 0
*
![Page 11: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/11.jpg)
11
1
2 + ( * 3 4 + ) 5
入力
$
スタック
$
出力
高
低
Num + * ( ) $ input 7 2 4 6 1 0 stack 7 3 5 1 0
*
![Page 12: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/12.jpg)
12
1
2 + ( * 3 4 + * ) 5
入力
$
スタック
$
出力
Num + * ( ) $ input 7 2 4 6 1 0 stack 7 3 5 1 0
![Page 13: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/13.jpg)
13
1
2 + ( * 3 4 + ) 5
入力
$
スタック
$
出力
高
低
Num + * ( ) $ input 7 2 4 6 1 0 stack 7 3 5 1 0
*
![Page 14: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/14.jpg)
14
1
2
+
( * 3 4 + ) 5
入力
$
スタック
$
出力
高
低
Num + * ( ) $ input 7 2 4 6 1 0 stack 7 3 5 1 0
*
![Page 15: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/15.jpg)
15
1
2 +
( * 3 4 + ) 5
入力
$
スタック
$
出力
高
低
Num + * ( ) $ input 7 2 4 6 1 0 stack 7 3 5 1 0
*
![Page 16: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/16.jpg)
16
1 2
+
( * 3 4 + ) 5
入力
$
スタック
$
出力
高
低
Num + * ( ) $ input 7 2 4 6 1 0 stack 7 3 5 1 0
*
![Page 17: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/17.jpg)
17
1 2
+
(
*
3 4 + ) 5
入力
$
スタック
$
出力
高
低
Num + * ( ) $ input 7 2 4 6 1 0 stack 7 3 5 1 0
*
![Page 18: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/18.jpg)
18
1 2
+ ( *
3 4 + ) 5
入力
$
スタック
$
出力
高
低
Num + * ( ) $ input 7 2 4 6 1 0 stack 7 3 5 1 0
*
![Page 19: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/19.jpg)
19
1 2
+ ( * 3
4 + * ) 5
入力
$
スタック
$
出力
高
低
Num + * ( ) $ input 7 2 4 6 1 0 stack 7 3 5 1 0
![Page 20: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/20.jpg)
20
1 2
+ ( *
3
4 + ) 5
入力
$
スタック
$
出力
高
低
Num + * ( ) $ input 7 2 4 6 1 0 stack 7 3 5 1 0
*
![Page 21: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/21.jpg)
21
1 2
+ ( *
3
4
+
) 5
入力
$
スタック
$
出力
Num + * ( ) $ input 7 2 4 6 1 0 stack 7 3 5 1 0
高
低
*
![Page 22: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/22.jpg)
22
1 2
+ ( *
3
4 +
) 5
入力
$
スタック
$
出力
Num + * ( ) $ input 7 2 4 6 1 0 stack 7 3 5 1 0
高
低
*
![Page 23: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/23.jpg)
23
1 2
+ ( *
3 4
+
) 5
入力
$
スタック
$
出力
Num + * ( ) $ input 7 2 4 6 1 0 stack 7 3 5 1 0
高
低
*
![Page 24: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/24.jpg)
24
1 2
+ ( *
3 4 +
) 5
入力
$
スタック
$
出力
Num + * ( ) $ input 7 2 4 6 1 0 stack 7 3 5 1 0
対応
対応
*
![Page 25: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/25.jpg)
25
1 2
+ *
3 4 +
5
入力
$
スタック
$
出力
Num + * ( ) $ input 7 2 4 6 1 0 stack 7 3 5 1 0
*
![Page 26: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/26.jpg)
26
1 2
+ *
3 4 +
5
入力
$
スタック
$
出力
Num + * ( ) $ input 7 2 4 6 1 0 stack 7 3 5 1 0
高
*
低
![Page 27: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/27.jpg)
27
1 2
+
* 3 4 +
5
入力
$
スタック
$
出力
Num + * ( ) $ input 7 2 4 6 1 0 stack 7 3 5 1 0
低
*
高
![Page 28: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/28.jpg)
28
1 2
+
* 3 4 +
5
入力
$
スタック
$
出力
Num + * ( ) $ input 7 2 4 6 1 0 stack 7 3 5 1 0
高
*
低
![Page 29: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/29.jpg)
29
1 2
+
* 3 4 +
5
入力
$
スタック
$
出力
Num + * ( ) $ input 7 2 4 6 1 0 stack 7 3 5 1 0
高
低
*
![Page 30: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/30.jpg)
30
1 2
+
* 3 4 + 5
入力
$
スタック
$
出力
Num + * ( ) $ input 7 2 4 6 1 0 stack 7 3 5 1 0
高
低
*
![Page 31: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/31.jpg)
31
1 2
+
* 3 4 + * 5
入力
$
スタック
$
出力
Num + * ( ) $ input 7 2 4 6 1 0 stack 7 3 5 1 0
高
低
![Page 32: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/32.jpg)
32
1 2 + * 3 4 + 5
入力
$
スタック
$
出力
Num + * ( ) $ input 7 2 4 6 1 0 stack 7 3 5 1 0
終了
終了
*
![Page 33: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/33.jpg)
Shunting-yard algorithm [Dijkstra 1961]
• 2つの順位関数を利用する手法を紹介した Ø Dijkstra のオリジナルの論文では順位関数は1つ
• 順位行列を利用する方法もある Ø こちらの方がより強力
• 能力 Ø 計算量 : O(n) Ø 言語 : Operator-precedence language Ø 文法 : Operator-precedence grammar
33
![Page 34: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/34.jpg)
Pratt parsing [Pratt 1973]
アイデア • 構文木の左下から上に成長させる • 構文木の右の枝は再帰的に作る
34
1
*
2
+
3
*
4
![Page 35: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/35.jpg)
35
- + 1 2 ( * - 3 ) 4 *
入力
5 $
$
![Page 36: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/36.jpg)
36
- + 1 2 ( * - 3 ) 4 *
入力
5 $
$
読む
空
![Page 37: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/37.jpg)
37
+ 1 2 ( * - 3 ) 4 *
入力
5 $
$
-
![Page 38: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/38.jpg)
38
+ 1 2 ( * - 3 ) 4 *
入力
5 $
$
- 前置単項演算子
![Page 39: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/39.jpg)
39
+ 1 2 ( * - 3 ) 4 *
入力
5 $
$
-
![Page 40: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/40.jpg)
40
+ 1 2 ( * - 3 ) 4 *
入力
5 $
$
-
読む
空
![Page 41: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/41.jpg)
41
+ 2 ( * - 3 ) 4 *
入力
5 $
$
-
1
![Page 42: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/42.jpg)
42
+ 2 ( * - 3 ) 4 *
入力
5 $
$
-
1
高
低
![Page 43: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/43.jpg)
43
+ 2 ( * - 3 ) 4 *
入力
5 $
$
-
1
![Page 44: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/44.jpg)
44
+ 2 ( * - 3 ) 4 *
入力
5 $
$
高
低
-
1
![Page 45: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/45.jpg)
45
+
2 ( * - 3 ) 4 *
入力
5 $
$
-
1
中置二項演算子
![Page 46: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/46.jpg)
46
* - 3 ) 4 *
入力
5 $
$
-
1
+
( 2
![Page 47: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/47.jpg)
47
* - 3 ) 4 *
入力
5 $
$
-
1
+
( 2
読む
空
![Page 48: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/48.jpg)
48
* - 3 ) 4 *
入力
5 $
$
-
1
+
(
2
(_):: 外置演算子
![Page 49: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/49.jpg)
49
* - 3 ) 4 *
入力
5 $
$
-
1
+
(
2
![Page 50: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/50.jpg)
50
* - 3 ) 4 *
入力
5 $
$
-
1
+
(
2
![Page 51: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/51.jpg)
51
* - 3 ) 4 *
入力
5 $
$
高
-
1
+
(
2
低
![Page 52: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/52.jpg)
52
- 3 ) 4 *
入力
5 $
$
-
1
+
(
2
*
![Page 53: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/53.jpg)
53
- ) 4 *
入力
5 $
$
-
1
+
(
2
*
3
![Page 54: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/54.jpg)
54
- ) 4 *
入力
5 $
$
低
-
1
+
(
2
*
3
高
![Page 55: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/55.jpg)
55
- ) 4 *
入力
5 $
$
-
1
+
(
2
*
3
高
低
![Page 56: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/56.jpg)
56
) 4 *
入力
5 $
$
-
1
+
(
2
*
3
-
![Page 57: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/57.jpg)
57
) *
入力
5 $
$
-
1
+
(
2
*
3
-
4
低
高
![Page 58: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/58.jpg)
58
) *
入力
5 $
$
-
1
+
(
2
*
3
-
4
対応
対応
![Page 59: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/59.jpg)
59
*
入力
5 $
$
-
1
+
2
*
3
-
4
![Page 60: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/60.jpg)
60
*
入力
5 $
$
-
1
+
2
*
3
-
4
高
低
![Page 61: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/61.jpg)
61
入力
5 $
$
-
1
+
2
*
3
-
4
*
![Page 62: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/62.jpg)
62
入力
$
$
-
1
+
2
*
3
-
4
*
5
![Page 63: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/63.jpg)
63
入力
$
$
-
1
+
2
*
3
-
4
*
5
低
高
![Page 64: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/64.jpg)
64
入力
$
$
-
1
+
2
*
3
-
4
*
5
低
高
![Page 65: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/65.jpg)
65
入力
$
$
-
1
+
2
*
3
-
4
*
5
終了
終了
![Page 66: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/66.jpg)
Pratt parsing [Pratt 1973]
• 手書きの構文解析器の一部としてよく用いられる Ø 再帰関数による実装と相性が良い
• 演算子順位構文解析の手法は他にも存在する Ø Precedence climbing method [Richardsら 1979]
• 能力 Ø 計算量 : O(n) Ø 言語 : Operator-precedence language Ø 文法 : Operator-precedence grammar
66
![Page 67: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/67.jpg)
上向き構文解析 Bottom-up parsing
67
![Page 68: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/68.jpg)
68
LR parsing [Knuth 1965] • 実用に十分な表現力を持ち、かつ高速 • 多くのパーサジェネレータで利用されている
GLR parsing [Tomita 1985] • Earley parsing の最適化版 • LR parsing の自然な拡張でもある
Earley parsing [Earley 1968] • CYK algorithm を任意の CFG に拡張したもの
CYK algorithm [Cocke 1969, Younger 1967, Kasami 1965] • 様々な CFG の構文解析手法の理論的なベース • Chomsky 標準形のみを対象とする
Valiant parsing [Valiant 1975] • CFG の構文解析は行列積の計算量で計算できることを示した
![Page 69: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/69.jpg)
LR parsing [Knuth 1965]
アイデア • 決定性オートマトンを作る • shift & reduce Ø shift : 終端記号を読んで遷移 Ø reduce : 構文木を組み立てて非終端記号で遷移
69
E
Num
+ Num
![Page 70: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/70.jpg)
70
1 2 * + + 3 4 5
入力
$
文法
E→E+TE→TT→T*NumT→Num
a
d
b
c
e g
f
E
Num
+
T
T
* h
*
Num
Num *
![Page 71: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/71.jpg)
71
1 2 * + + 3 4 5 $
文法
shift
E→E+TE→TT→T*NumT→Num
入力
a
d
b
c
e g
f
E
Num
+
T
T
* h
*
Num
Num *
![Page 72: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/72.jpg)
72
2 * + + 3 4 5 $
文法
E→E+TE→TT→T*NumT→Num
a d 1
入力
a
d
b
c
e g
f
E
Num
+
T
T
* h
*
Num
Num *
![Page 73: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/73.jpg)
73
2 * + + 3 4 5 $
文法
reduce
E→E+TE→TT→T*NumT→Num
a d 1
入力
a
d
b
c
e g
f
E
Num
+
T
T
* h
*
Num
Num *
![Page 74: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/74.jpg)
74
2 * + + 3 4 5 $
a
E→E+TE→TT→T*NumT→Num
文法
T→ 1
入力
a
d
b
c
e g
f
E
Num
+
T
T
* h
*
Num
Num *
![Page 75: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/75.jpg)
75
2 * + + 3 4 5 $
a
E→E+TE→TT→T*NumT→Num
文法
c
T→ 1
入力
a
d
b
c
e g
f
E
Num
+
T
T
* h
*
Num
Num *
![Page 76: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/76.jpg)
76
2 * + + 3 4 5 $
a
E→E+TE→TT→T*NumT→Num
文法
a
d
b
c
e g
f
E
Num
+
T
T
* h
*
Num
Num
c
T→ 1
入力
shift?reduce?
*
![Page 77: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/77.jpg)
77
2 * + + 3 4 5 $
a
E→E+TE→TT→T*NumT→Num
文法
a
d
b
c
e g
f
E
Num
+
T
T
* h
*
Num
Num
c
T→ 1
入力
look-ahead
*
![Page 78: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/78.jpg)
78
2 * + + 3 4 5 $
a
E→E+TE→TT→T*NumT→Num
文法
a
d
b
c
e g
f
E
Num
+
T
T
* h
*
Num
Num
c
T→ 1
入力
look-ahead
reduce *
![Page 79: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/79.jpg)
79
2 * + + 3 4 5 $
a
E→E+TE→TT→T*NumT→Num
文法
a
d
b
c
e g
f
E
Num
+
T
T
* h
*
Num
Num
c
T→ 1
入力
look-ahead
*なし
*あり
*
![Page 80: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/80.jpg)
80
2 * + + 3 4 5 $
a
E→E+TE→TT→T*NumT→Num
文法
a
d
b
c
e g
f
E
Num
+
T
T
* h
*
Num
Num
c
T→ 1
入力
shift
*
![Page 81: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/81.jpg)
81
2
*
+ + 3 4 5 $
a
E→E+TE→TT→T*NumT→Num
文法
a
d
b
c
e g
f
E
Num
+
T
T
* h
*
Num
Num
c
T→ 1
入力
f
*
![Page 82: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/82.jpg)
82
2
*
+ + 3 4 5 $
a
E→E+TE→TT→T*NumT→Num
文法
a
d
b
c
e g
f
E
Num
+
T
T
* h
*
Num
Num
c
T→ 1
入力
f
shift
*
![Page 83: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/83.jpg)
83
2 *
+ + 3 4 5 $
a
E→E+TE→TT→T*NumT→Num
文法
a
d
b
c
e g
f
E
Num
+
T
T
* h
*
Num
Num
c
T→ 1
入力
f h
*
![Page 84: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/84.jpg)
84
2 *
+ + 3 4 5 $
a
E→E+TE→TT→T*NumT→Num
文法
a
d
b
c
e g
f
E
Num
+
T
T
* h
*
Num
Num
c
T→ 1
入力
f h
reduce
*
![Page 85: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/85.jpg)
T→
85
2
*
+ + 3 4 5 $
a
E→E+TE→TT→T*NumT→Num
文法
a
d
b
c
e g
f
E
Num
+
T
T
* h
*
Num
Num
c
1
入力
*
![Page 86: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/86.jpg)
T→
86
2
*
+ + 3 4 5 $
a
E→E+TE→TT→T*NumT→Num
文法
a
d
b
c
e g
f
E
Num
+
T
T
* h
*
Num
Num
c
1
入力
+なし
*
![Page 87: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/87.jpg)
T→
87
2
*
+ + 3 4 5 $
a
E→E+TE→TT→T*NumT→Num
文法
a
d
b
c
e g
f
E
Num
+
T
T
* h
*
Num
Num
c
1
入力
reduce
*
![Page 88: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/88.jpg)
E→
88
2
*
+ + 3 4 5 $
a
E→E+TE→TT→T*NumT→Num
文法
a
d
b
c
e g
f
E
Num
+
T
T
* h
*
Num
Num
b
1
入力
*
![Page 89: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/89.jpg)
E→
89
2
*
+
+ 3 4 5 $
a
E→E+TE→TT→T*NumT→Num
文法
a
d
b
c
e g
f
E
Num
+
T
T
* h
*
Num
Num
b
1
入力
e
*
![Page 90: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/90.jpg)
E→
90
2
*
+
+
3
4 5 $
a
E→E+TE→TT→T*NumT→Num
文法
a
d
b
c
e g
f
E
Num
+
T
T
* h
*
Num
Num
b
1
入力
e d
*
![Page 91: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/91.jpg)
E→
91
2
*
+
+ 4 5 $
a
E→E+TE→TT→T*NumT→Num
文法
a
d
b
c
e g
f
E
Num
+
T
T
* h
*
Num
Num
b
1
入力
e g
T→ 3
*
![Page 92: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/92.jpg)
E→
92
2
*
+
+ 4 5 $
a
E→E+TE→TT→T*NumT→Num
文法
a
d
b
c
e g
f
E
Num
+
T
T
* h
*
Num
Num
b
1
入力
e g
T→ 3
+なし
reduce
*
![Page 93: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/93.jpg)
E→
93
+ 4 5 $
a
E→E+TE→TT→T*NumT→Num
文法
a
d
b
c
e g
f
E
Num
+
T
T
* h
*
Num
Num
b
入力
2
+
1
* 3
*
![Page 94: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/94.jpg)
94
+
4 5 $
a
E→E+TE→TT→T*NumT→Num
文法
a
d
b
c
e g
f
E
Num
+
T
T
* h
*
Num
Num
b
入力
e
E→
2
+
1
* 3
*
![Page 95: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/95.jpg)
95
+ 4
5 $
a
E→E+TE→TT→T*NumT→Num
文法
a
d
b
c
e g
f
E
Num
+
T
T
* h
*
Num
Num
b
入力
e d
E→
2
+
1
* 3
*
![Page 96: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/96.jpg)
96
+
5 $
a
E→E+TE→TT→T*NumT→Num
文法
a
d
b
c
e g
f
E
Num
+
T
T
* h
*
Num
Num
b
入力
e g
T→ 4
E→
+
* 3 2 1
*
![Page 97: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/97.jpg)
97
+
* 5 $
a
E→E+TE→TT→T*NumT→Num
文法
a
d
b
c
e g
f
E
Num
+
T
T
* h
*
Num
Num
b
入力
e g
T→ 4
* なし
*あり
E→
+
* 3 2 1
![Page 98: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/98.jpg)
98
+ *
5 $
a
E→E+TE→TT→T*NumT→Num
文法
a
d
b
c
e g
f
E
Num
+
T
T
* h
*
Num
Num
b
入力
e g
T→ 4
E→
+
* 3 2 1
f
![Page 99: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/99.jpg)
99
+ 5
$
a
E→E+TE→TT→T*NumT→Num
文法
a
d
b
c
e g
f
E
Num
+
T
T
* h
*
Num
Num
b
入力
e g
T→ 4
E→
+
* 3 2 1
f h *
![Page 100: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/100.jpg)
100
+
$
a
E→E+TE→TT→T*NumT→Num
文法
a
d
b
c
e g
f
E
Num
+
T
T
* h
*
Num
Num
b
入力
e g
E→
+
* 3 2 1
T→ 5
*
4
![Page 101: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/101.jpg)
E→
101
$
a
E→E+TE→TT→T*NumT→Num
文法
a
d
b
c
e g
f
E
Num
+
T
T
* h
*
Num
Num
b
入力
+
+
* 3 2 1
5
*
4
![Page 102: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/102.jpg)
LR parsing [Knuth 1965]
• 通常は LR 構文解析表を利用する • 構文解析表の作り方により受理文法が異なる Ø SLR(1), LALR(1) [DeRemer 1969, 1971] など Ø 紹介した手法は SLR(1) に相当 Ø 解説: www.slideshare.net/ichikaz3/lr-parsing
• 能力 Ø 計算量 : O(n) Ø 言語 : Deterministic context-free language Ø 文法 : LR(1), SLR(1), LALR(1), ...
102
![Page 103: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/103.jpg)
GLR parsing [Tomita 1985]
アイデア • 非決定性オートマトンを作る • 異なる遷移で同一状態になったものをまとめる Ø グラフ構造スタック(GSS) Ø Parse forest : 子の構文木を直接持たず、ラベルで持つ
103
E
Num
+ Num
E +
![Page 104: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/104.jpg)
104
a d
b
c
e g
f
E
Num
+
T T
* h
+
Num
Num
*
E
T
E→E+EE→TT→T*TT→Num
文法
1 2 + * * 3 + 4 5
入力
$
![Page 105: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/105.jpg)
105
a d
b
c
e g
f
E
Num
+
T T
* h
+
Num
Num
*
E
T
E→E+EE→TT→T*TT→Num
文法
a d 1
2 + * * 3 + 4 5
入力
$
![Page 106: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/106.jpg)
106
a d
b
c
e g
f
E
Num
+
T T
* h
+
Num
Num
*
E
T
E→E+EE→TT→T*TT→Num
文法
a c
2 + * * 3 + 4 5
入力
$
1
T1
![Page 107: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/107.jpg)
107
a d
b
c
e g
f
E
Num
+
T T
* h
+
Num
Num
*
E
T
E→E+EE→TT→T*TT→Num
文法
a b
2 + * * 3 + 4 5
入力
$
E1
T1
1
T1
![Page 108: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/108.jpg)
108
a d
b
c
e g
f
E
Num
+
T T
* h
+
Num
Num
*
E
T
E→E+EE→TT→T*TT→Num
文法
a b
2
+
* * 3 + 4 5
入力
$
e
E1
T1
![Page 109: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/109.jpg)
109
a d
b
c
e g
f
E
Num
+
T T
* h
+
Num
Num
*
E
T
E→E+EE→TT→T*TT→Num
文法
a b 2 +
* * 3 + 4 5
入力
$
e d
E1
T1
![Page 110: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/110.jpg)
110
a d
b
c
e g
f
E
Num
+
T T
* h
+
Num
Num
*
E
T
E→E+EE→TT→T*TT→Num
文法
a b +
* * 3 + 4 5
入力
$
E1
T1
e c
2
T2
![Page 111: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/111.jpg)
111
a d
b
c
e g
f
E
Num
+
T T
* h
+
Num
Num
*
E
T
E→E+EE→TT→T*TT→Num
文法
a b +
* * 3 + 4 5
入力
$
E1
T1
e c
2
T2
![Page 112: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/112.jpg)
112
a d
b
c
e g
f
E
Num
+
T T
* h
+
Num
Num
*
E
T
E→E+EE→TT→T*TT→Num
文法
a b + *
* 3 + 4 5
入力
$
E1
T1
e c
2
T2
f
![Page 113: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/113.jpg)
113
a d
b
c
e g
f
E
Num
+
T T
* h
+
Num
Num
*
E
T
E→E+EE→TT→T*TT→Num
文法
a b + *
*
3
+ 4 5
入力
$
E1
T1
e c
2
T2
f d
![Page 114: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/114.jpg)
114
a d
b
c
e g
f
E
Num
+
T T
* h
+
Num
Num
*
E
T
E→E+EE→TT→T*TT→Num
文法
a b + *
* + 4 5
入力
$
E1
T1
e c
2
T2
f h
3
T3
![Page 115: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/115.jpg)
115
a d
b
c
e g
f
E
Num
+
T T
* h
+
Num
Num
*
E
T
E→E+EE→TT→T*TT→Num
文法
a b + *
* + 4 5
入力
$
E1
T1
e c
2
T2
f h
3
T3
![Page 116: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/116.jpg)
116
a d
b
c
e g
f
E
Num
+
T T
* h
+
Num
Num
*
E
T
E→E+EE→TT→T*TT→Num
文法
a b + *
* + 4 5
入力
$
E1
T1
e c
2
T2
f h
3
T3
* あり * あり
![Page 117: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/117.jpg)
117
a d
b
c
e g
f
E
Num
+
T T
* h
+
Num
Num
*
E
T
E→E+EE→TT→T*TT→Num
文法
a b +
*
* + 4 5
入力
$
E1
T1
e
c
2 T2
f h
3 T3
* T4
T2 T3
c
![Page 118: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/118.jpg)
118
a d
b
c
e g
f
E
Num
+
T T
* h
+
Num
Num
*
E
T
E→E+EE→TT→T*TT→Num
文法
a b +
*
*
+ 5
入力
$
E1
T1
e
c
2 T2
f h
3 T3
* T4
T2 T3
c
f
*
4
![Page 119: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/119.jpg)
119
a d
b
c
e g
f
E
Num
+
T T
* h
+
Num
Num
*
E
T
E→E+EE→TT→T*TT→Num
文法
a b +
*
*
+
4
5
入力
$
E1
T1
e
c
2 T2
f h
3 T3
* T4
T2 T3
c
f
*
d
![Page 120: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/120.jpg)
120
a d
b
c
e g
f
E
Num
+
T T
* h
+
Num
Num
*
E
T
E→E+EE→TT→T*TT→Num
文法
a b +
*
*
+ 5
入力
$
E1
T1
e
c
2 T2
f h
3 T3
* T4
T2 T3
c
f
*
h
4
T5
![Page 121: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/121.jpg)
121
a d
b
c
e g
f
E
Num
+
T T
* h
+
Num
Num
*
E
T
E→E+EE→TT→T*TT→Num
文法
a b +
*
*
+ 5
入力
$
E1
T1
e
c
2 T2
f h
* T4
T2 T3
c
f h
4
T5
* T3 T5 T6
![Page 122: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/122.jpg)
122
a d
b
c
e g
f
E
Num
+
T T
* h
+
Num
Num
*
E
T
E→E+EE→TT→T*TT→Num
文法
a b +
*
+ 5
入力
$
E1
T1
e
c
2 T2
f h
c
* T3 T5 T6
* T4 T5
T7
![Page 123: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/123.jpg)
123
a d
b
c
e g
f
E
Num
+
T T
* h
+
Num
Num
*
E
T
E→E+EE→TT→T*TT→Num
文法
a b +
+ 5
入力
$
E1
T1
e
c
c
* T4 T5
T7
* T2 T6
T8
![Page 124: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/124.jpg)
124
a d
b
c
e g
f
E
Num
+
T T
* h
+
Num
Num
*
E
T
E→E+EE→TT→T*TT→Num
文法
a b +
+ 5
入力
$
E1
T1
e c
| T7 T8
T9
![Page 125: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/125.jpg)
125
a d
b
c
e g
f
E
Num
+
T T
* h
+
Num
Num
*
E
T
E→E+EE→TT→T*TT→Num
文法
a b +
+ 5
入力
$
E1
T1
e c
| T7 T8
T9
(2*3)*4 2*(3*4)
![Page 126: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/126.jpg)
126
a d
b
c
e g
f
E
Num
+
T T
* h
+
Num
Num
*
E
T
E→E+EE→TT→T*TT→Num
文法
a b +
+ 5
入力
$
E1
T1
e g
E2
T9
![Page 127: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/127.jpg)
127
a d
b
c
e g
f
E
Num
+
T T
* h
+
Num
Num
*
E
T
E→E+EE→TT→T*TT→Num
文法
a b +
+ 5
入力
$
E1
T1
e g
E2
T9
+ あり + あり
![Page 128: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/128.jpg)
128
a d
b
c
e g
f
E
Num
+
T T
* h
+
Num
Num
*
E
T
E→E+EE→TT→T*TT→Num
文法
a
b +
+ 5
入力
$ E1
T1
e g
E2
T9
b
+ E1 E2
E3
![Page 129: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/129.jpg)
129
a d
b
c
e g
f
E
Num
+
T T
* h
+
Num
Num
*
E
T
E→E+EE→TT→T*TT→Num
文法
a
b +
+
5
入力
$ E1
T1
e g
E2
T9
b
+ E1 E2
E3
e +
![Page 130: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/130.jpg)
130
a d
b
c
e g
f
E
Num
+
T T
* h
+
Num
Num
*
E
T
E→E+EE→TT→T*TT→Num
文法
a
b +
+ 5
入力
$ E1
T1
e g
E2
T9
b
+ E1 E2
E3
e + d
![Page 131: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/131.jpg)
131
a d
b
c
e g
f
E
Num
+
T T
* h
+
Num
Num
*
E
T
E→E+EE→TT→T*TT→Num
文法
a
b +
+
入力
$ E1
T1
e g
E2
T9
b
+ E1 E2
E3
e + c
5 T10
![Page 132: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/132.jpg)
132
a d
b
c
e g
f
E
Num
+
T T
* h
+
Num
Num
*
E
T
E→E+EE→TT→T*TT→Num
文法
a
b +
+
入力
$ E1
T1
e g
E2
T9
b
+ E1 E2
E3
e + g
E4
T10
![Page 133: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/133.jpg)
133
a d
b
c
e g
f
E
Num
+
T T
* h
+
Num
Num
*
E
T
E→E+EE→TT→T*TT→Num
文法
a
b +
入力
$ E1
T1
e g
b
+ E1 E2
E3
e + c
E4
T10
+ E2 E4
E5
![Page 134: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/134.jpg)
134
a d
b
c
e g
f
E
Num
+
T T
* h
+
Num
Num
*
E
T
E→E+EE→TT→T*TT→Num
文法
a
b +
入力
$ E1
T1
e g
b
+ E3 E4
E6
+ E2 E4
E5
![Page 135: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/135.jpg)
135
a d
b
c
e g
f
E
Num
+
T T
* h
+
Num
Num
*
E
T
E→E+EE→TT→T*TT→Num
文法
a
入力
$
b
b
+ E3 E4
E6
+ E1 E5
E7
![Page 136: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/136.jpg)
136
a d
b
c
e g
f
E
Num
+
T T
* h
+
Num
Num
*
E
T
E→E+EE→TT→T*TT→Num
文法
入力
$
a b
| E6 E7
E8
![Page 137: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/137.jpg)
GLR parsing [Tomita 1985]
• 構文解析表の作り方は LR parsing と同様 Ø ただし同一箇所に複数規則を許す
• ほぼ決定的な文法に対して O(n) で動作 • 能力 Ø 計算量 : O(np+1) (p=文法の最長の右辺の長さ) Ø 言語 : Context-free language Ø 文法 : Context-free grammar
137
![Page 138: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/138.jpg)
Earley parsing [Earley 1968]
アイデア • 動的計画法 • 入力位置を進めながら構文規則上の位置を記録する Ø 構文木を記憶すると指数爆発するため親エントリを記憶
138
1 + 2 + 3
E→Num·{3}E→E·+E{3,2+3,(1+2)+3,1+(2+3)}E→E+E·{2+3,(1+2)+3,1+(2+3)}S→E·{(1+2)+3,1+(2+3)}
E→Num·{1}E→E·+E{1}S→E·{1}
![Page 139: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/139.jpg)
139
1 2 * + + 3 * 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
![Page 140: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/140.jpg)
140
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
a00:E→·E+Eb00:E→·Tc00:T→·T*Td00:T→·Num
*
![Page 141: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/141.jpg)
141
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
a00:E→·E+Eb00:E→·Tc00:T→·T*Td00:T→·Num
0文字目から0文字目まで
文法上の位置
*
![Page 142: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/142.jpg)
142
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
*
![Page 143: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/143.jpg)
143
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
d00:T→·Num
*
![Page 144: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/144.jpg)
144
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
a01:T→Num·[d00]
d00:T→·Num
scan (≒ shift)
*
![Page 145: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/145.jpg)
145
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
a01:T→Num·[d00]
0文字目から1文字目まででTになる
*
![Page 146: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/146.jpg)
146
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
a01:T→Num·[d00]
c00:T→·T*T
*
![Page 147: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/147.jpg)
147
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
a01:T→Num·[d00]b01:T→T·*T[c00]
c00:T→·T*T
complete (≒ reduce)
*
![Page 148: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/148.jpg)
148
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
a01:T→Num·[d00]b01:T→T·*T[c00]
b00:E→·T
*
![Page 149: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/149.jpg)
149
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
a01:T→Num·[d00]b01:T→T·*T[c00]c01:E→T·[b00]
b00:E→·T
complete
*
![Page 150: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/150.jpg)
150
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
a01:T→Num·[d00]b01:T→T·*T[c00]c01:E→T·[b00]
a00:E→·E+E
*
![Page 151: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/151.jpg)
151
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
a01:T→Num·[d00]b01:T→T·*T[c00]c01:E→T·[b00]d01:E→E·+E[a00]
a00:E→·E+E
complete
*
![Page 152: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/152.jpg)
152
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
b01:T→T·*T
*
![Page 153: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/153.jpg)
153
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
a02:T→T*·T[b01]
b01:T→T·*T
scan
*
![Page 154: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/154.jpg)
154
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
a02:T→T*·T[b01]
非終端記号の前 *
![Page 155: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/155.jpg)
155
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
a02:T→T*·T[b01]b22:T→·T*T[a02]c22:T→·Num[a02]
predict
*
![Page 156: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/156.jpg)
156
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
a02:T→T*·T[b01]b22:T→·T*T[a02]c22:T→·Num[a02]
scan → complete → predict
*
![Page 157: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/157.jpg)
157
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
a23:T→Num·[c22]
scan → complete → predict
scan
c22:T→·Num
*
![Page 158: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/158.jpg)
158
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
a23:T→Num·[c22]b23:T→T·*T[b22]c03:T→T*T·[a02]
scan → complete → predict
a02:T→T*·Tb22:T→·T*T
complete
*
![Page 159: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/159.jpg)
159
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
a23:T→Num·[c22]b23:T→T·*T[b22]c03:T→T*T·[a02]d03:T→T·*T[c00]e03:E→T·[b00]f03:E→E·+E[a00]
scan → complete → predict
a00:E→·E+Eb00:E→·Tc00:T→·T*T
complete
*
![Page 160: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/160.jpg)
160
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
a04:E→E+·E[f03]
scan → complete → predict
f03:E→E·+E
scan
*
![Page 161: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/161.jpg)
161
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
a04:E→E+·E[f03]b44:E→·E+E[a04]c44:E→·T[a04]d44:T→·T*T[c44]e44:T→·Num[c44]
scan → complete → predict
predict
*
![Page 162: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/162.jpg)
162
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
a45:T→Num·[e44]
scan → complete → predict
scan
e44:T→·Num
*
![Page 163: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/163.jpg)
163
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
a45:T→Num·[e44]b45:T→T·*T[d44]c45:E→T·[c44]d45:E→E·+E[b44]e05:E→E+E·[a04]
scan → complete → predict
a04:E→E+·Eb44:E→·E+Ec44:E→·Td44:T→·T*T
complete
*
![Page 164: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/164.jpg)
164
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
a45:T→Num·[e44]b45:T→T·*T[d44]c45:E→T·[c44]d45:E→E·+E[b44]e05:E→E+E·[a04]f05:E→E·+E[a00]
scan → complete → predict
complete
a00:E→·E+E
*
![Page 165: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/165.jpg)
165
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
a46:E→E+·E[d45]b06:E→E+·E[f05]
scan → complete → predict
d45:E→E·+Ef05:E→E·+E
scan
*
![Page 166: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/166.jpg)
166
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
a46:E→E+·E[d45]b06:E→E+·E[f05]c66:E→·E+E[a46]d66:E→·T[a46]e66:T→·T*T[d66]f66:T→·Num[d66]
scan → complete → predict
predict
*
![Page 167: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/167.jpg)
167
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
a67:T→Num·[f66]
scan → complete → predict
scan
f66:T→·Num
*
![Page 168: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/168.jpg)
168
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
a67:T→Num·[f66]b67:T→T·*T[e66]c67:E→T·[d66]b67:E→E·+E[c66]e07:E→E+E·[b06]f47:E→E+E·[a46]
scan → complete → predict
a46:E→E+·Eb06:E→E+·Ec66:E→·E+Ed66:E→·Te66:T→·T*T
complete
*
![Page 169: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/169.jpg)
169
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
a67:T→Num·[f66]b67:T→T·*T[e66]c67:E→T·[d66]b67:E→E·+E[c66]e07:E→E+E·[b06]f47:E→E+E·[a46]g47:E→E·+E[b44]h07:E→E+E·[a04]
scan → complete → predict
a04:E→E+·Eb44:E→·E+E
complete
*
![Page 170: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/170.jpg)
170
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
a67:T→Num·[f66]b67:T→T·*T[e66]c67:E→T·[d66]b67:E→E·+E[c66]e07:E→E+E·[b06]f47:E→E+E·[a46]g47:E→E·+E[b44]h07:E→E+E·[a04]i07:E→E·+E[a00]
scan → complete → predict
complete
a00:E→·E+E
*
![Page 171: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/171.jpg)
171
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
a68:T→T*·T[b67]
scan → complete → predict
b67:T→T·*T
scan
*
![Page 172: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/172.jpg)
172
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
a68:T→T*·T[b67]b88:T→·T*T[a68]c88:T→·Num[a68]
scan → complete → predict
predict
*
![Page 173: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/173.jpg)
173
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
a89:T→Num·[c88]
scan → complete → predict
c88:T→·Num
scan
*
![Page 174: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/174.jpg)
174
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
a89:T→Num·[c88]b89:T→T·*T[b88]c69:T→T*T·[a68]
scan → complete → predict
a68:T→T*·Tb88:T→·T*T
complete
*
![Page 175: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/175.jpg)
175
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
a89:T→Num·[c88]b89:T→T·*T[b88]c69:T→T*T·[a68]d69:T→T·*T[e66]e69:E→T·[d66]f69:E→E·+E[c66]
g09:E→E+E·[b06]h49:E→E+E·[a46]
scan → complete → predict
a46:E→E+·Eb06:E→E+·Ec66:E→·E+Ed66:E→·Te66:T→·T*T
complete
*
![Page 176: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/176.jpg)
176
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
a89:T→Num·[c88]b89:T→T·*T[b88]c69:T→T*T·[a68]d69:T→T·*T[e66]e69:E→T·[d66]f69:E→E·+E[c66]
g09:E→E+E·[b06]h49:E→E+E·[a46]i49:E→E·+E[b44]j09:E→E+E·[a04]
scan → complete → predict
a04:E→E+·Eb44:E→·E+E
complete
*
![Page 177: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/177.jpg)
177
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
a89:T→Num·[c88]b89:T→T·*T[b88]c69:T→T*T·[a68]d69:T→T·*T[e66]e69:E→T·[d66]f69:E→E·+E[c66]
g09:E→E+E·[b06]h49:E→E+E·[a46]i49:E→E·+E[b44]j09:E→E+E·[a04]k09:E→E·+E[a00]
scan → complete → predict
a00:E→·E+E
complete
*
![Page 178: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/178.jpg)
178
1 2 * + + 3 4 5 入力
$
E→E+EE→TT→T*TT→Num
文法
a89:T→Num·[c88]b89:T→T·*T[b88]c69:T→T*T·[a68]d69:T→T·*T[e66]e69:E→T·[d66]f69:E→E·+E[c66]
g09:E→E+E·[b06]h49:E→E+E·[a46]i49:E→E·+E[b44]j09:E→E+E·[a04]k09:E→E·+E[a00]
scan → complete → predict
*
![Page 179: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/179.jpg)
Earley parsing [Earley 1968]
• 原理的には LR parsing と同じ Ø scan = shift, complete = reduce Ø predict は LR ではオートマトン生成時に行っている
• メモ化した再帰下降構文解析とほぼ同じ [Norvig 1991]
• 能力 Ø 計算量 : O(n3) Ø 言語 : Context-free language Ø 文法 : Context-free grammar
179
![Page 180: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/180.jpg)
CYK algorithm [Cocke 1969, Younger 1967, Kasami 1965]
アイデア • 動的計画法 • n ~ n+k 番目のあり得る構文木を列挙していく • Chomsky標準形の文法が対象
180
[ Chomsky 標準形 ] 以下の形式の規則しか持たない :
Ø A→BCØ A→aØ S→ε
![Page 181: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/181.jpg)
181
S→EE1E→EE1S→TT1E→TT1T→TT1E1→N1ET1→N2T
S→NumE→NumT→NumN1→+N2→*
入力 1 2 + * * 3 4
文法
![Page 182: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/182.jpg)
182
S→EE1E→EE1S→TT1E→TT1T→TT1E1→N1ET1→N2T
S→NumE→NumT→NumN1→+N2→*
入力 1 2 + * * 3 4
文法 S→EE→E+EE→TT→T*TT→Num
![Page 183: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/183.jpg)
183
入力
T,E,S
N1
T,E,S
N2
T,E,S
N2
T,E,S
1 2 + * * 3 4
S→EE1E→EE1S→TT1E→TT1T→TT1E1→N1ET1→N2T
S→NumE→NumT→NumN1→+N2→*
文法
![Page 184: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/184.jpg)
184
入力
T,E,S -
N1
T,E,S
N2
T,E,S
N2
T,E,S
1 2 + * * 3 4
S→EE1E→EE1S→TT1E→TT1T→TT1E1→N1ET1→N2T
S→NumE→NumT→NumN1→+N2→*
文法
![Page 185: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/185.jpg)
185
入力
T,E,S -
N1 E1
T,E,S
N2
T,E,S
N2
T,E,S
1 2 + * * 3 4
S→EE1E→EE1S→TT1E→TT1T→TT1E1→N1ET1→N2T
S→NumE→NumT→NumN1→+N2→*
文法
![Page 186: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/186.jpg)
186
入力
T,E,S -
N1 E1
T,E,S -
N2
T,E,S
N2
T,E,S
1 2 + * * 3 4
S→EE1E→EE1S→TT1E→TT1T→TT1E1→N1ET1→N2T
S→NumE→NumT→NumN1→+N2→*
文法
![Page 187: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/187.jpg)
187
入力
T,E,S -
N1 E1
T,E,S -
N2 T1
T,E,S
N2
T,E,S
1 2 + * * 3 4
S→EE1E→EE1S→TT1E→TT1T→TT1E1→N1ET1→N2T
S→NumE→NumT→NumN1→+N2→*
文法
![Page 188: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/188.jpg)
188
入力
T,E,S -
N1 E1
T,E,S -
N2 T1
T,E,S -
N2
T,E,S
1 2 + * * 3 4
S→EE1E→EE1S→TT1E→TT1T→TT1E1→N1ET1→N2T
S→NumE→NumT→NumN1→+N2→*
文法
![Page 189: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/189.jpg)
189
入力
T,E,S -
N1 E1
T,E,S -
N2 T1
T,E,S -
N2 T1
T,E,S
1 2 + * * 3 4
S→EE1E→EE1S→TT1E→TT1T→TT1E1→N1ET1→N2T
S→NumE→NumT→NumN1→+N2→*
文法
![Page 190: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/190.jpg)
190
入力
T,E,S - E,S
N1 E1
T,E,S -
N2 T1
T,E,S -
N2 T1
T,E,S
1 2 + * * 3 4
S→EE1E→EE1S→TT1E→TT1T→TT1E1→N1ET1→N2T
S→NumE→NumT→NumN1→+N2→*
文法
![Page 191: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/191.jpg)
191
入力
T,E,S - E,S
N1 E1 -
T,E,S -
N2 T1
T,E,S -
N2 T1
T,E,S
1 2 + * * 3 4
S→EE1E→EE1S→TT1E→TT1T→TT1E1→N1ET1→N2T
S→NumE→NumT→NumN1→+N2→*
文法
![Page 192: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/192.jpg)
192
入力
T,E,S - E,S
N1 E1 -
T,E,S - T,E,S
N2 T1
T,E,S -
N2 T1
T,E,S
1 2 + * * 3 4
S→EE1E→EE1S→TT1E→TT1T→TT1E1→N1ET1→N2T
S→NumE→NumT→NumN1→+N2→*
文法
![Page 193: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/193.jpg)
193
入力
T,E,S - E,S
N1 E1 -
T,E,S - T,E,S
N2 T1 -
T,E,S -
N2 T1
T,E,S
1 2 + * * 3 4
S→EE1E→EE1S→TT1E→TT1T→TT1E1→N1ET1→N2T
S→NumE→NumT→NumN1→+N2→*
文法
![Page 194: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/194.jpg)
194
入力
T,E,S - E,S
N1 E1 -
T,E,S - T,E,S
N2 T1 -
T,E,S - T,E,S
N2 T1
T,E,S
1 2 + * * 3 4
S→EE1E→EE1S→TT1E→TT1T→TT1E1→N1ET1→N2T
S→NumE→NumT→NumN1→+N2→*
文法
![Page 195: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/195.jpg)
195
入力
T,E,S - E,S -
N1 E1 -
T,E,S - T,E,S
N2 T1 -
T,E,S - T,E,S
N2 T1
T,E,S
1 2 + * * 3 4
S→EE1E→EE1S→TT1E→TT1T→TT1E1→N1ET1→N2T
S→NumE→NumT→NumN1→+N2→*
文法
![Page 196: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/196.jpg)
196
入力
T,E,S - E,S -
N1 E1 - E1
T,E,S - T,E,S
N2 T1 -
T,E,S - T,E,S
N2 T1
T,E,S
1 2 + * * 3 4
S→EE1E→EE1S→TT1E→TT1T→TT1E1→N1ET1→N2T
S→NumE→NumT→NumN1→+N2→*
文法
![Page 197: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/197.jpg)
197
入力
T,E,S - E,S -
N1 E1 - E1
T,E,S - T,E,S -
N2 T1 -
T,E,S - T,E,S
N2 T1
T,E,S
1 2 + * * 3 4
S→EE1E→EE1S→TT1E→TT1T→TT1E1→N1ET1→N2T
S→NumE→NumT→NumN1→+N2→*
文法
![Page 198: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/198.jpg)
198
入力
T,E,S - E,S -
N1 E1 - E1
T,E,S - T,E,S -
N2 T1 - T1
T,E,S - T,E,S
N2 T1
T,E,S
1 2 + * * 3 4
S→EE1E→EE1S→TT1E→TT1T→TT1E1→N1ET1→N2T
S→NumE→NumT→NumN1→+N2→*
文法
![Page 199: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/199.jpg)
199
入力
T,E,S - E,S - E,S
N1 E1 - E1
T,E,S - T,E,S -
N2 T1 - T1
T,E,S - T,E,S
N2 T1
T,E,S
1 2 + * * 3 4
S→EE1E→EE1S→TT1E→TT1T→TT1E1→N1ET1→N2T
S→NumE→NumT→NumN1→+N2→*
文法
![Page 200: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/200.jpg)
200
入力
T,E,S - E,S - E,S
N1 E1 - E1 -
T,E,S - T,E,S -
N2 T1 - T1
T,E,S - T,E,S
N2 T1
T,E,S
1 2 + * * 3 4
S→EE1E→EE1S→TT1E→TT1T→TT1E1→N1ET1→N2T
S→NumE→NumT→NumN1→+N2→*
文法
![Page 201: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/201.jpg)
201
入力
T,E,S - E,S - E,S
N1 E1 - E1 -
T,E,S - T,E,S - T,E,S
N2 T1 - T1
T,E,S - T,E,S
N2 T1
T,E,S
1 2 + * * 3 4
S→EE1E→EE1S→TT1E→TT1T→TT1E1→N1ET1→N2T
S→NumE→NumT→NumN1→+N2→*
文法
![Page 202: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/202.jpg)
202
入力
T,E,S - E,S - E,S -
N1 E1 - E1 -
T,E,S - T,E,S - T,E,S
N2 T1 - T1
T,E,S - T,E,S
N2 T1
T,E,S
1 2 + * * 3 4
S→EE1E→EE1S→TT1E→TT1T→TT1E1→N1ET1→N2T
S→NumE→NumT→NumN1→+N2→*
文法
![Page 203: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/203.jpg)
203
入力
T,E,S - E,S - E,S -
N1 E1 - E1 - E1
T,E,S - T,E,S - T,E,S
N2 T1 - T1
T,E,S - T,E,S
N2 T1
T,E,S
1 2 + * * 3 4
S→EE1E→EE1S→TT1E→TT1T→TT1E1→N1ET1→N2T
S→NumE→NumT→NumN1→+N2→*
文法
![Page 204: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/204.jpg)
204
入力
T,E,S - E,S - E,S - E,S
N1 E1 - E1 - E1
T,E,S - T,E,S - T,E,S
N2 T1 - T1
T,E,S - T,E,S
N2 T1
T,E,S
1 2 + * * 3 4
S→EE1E→EE1S→TT1E→TT1T→TT1E1→N1ET1→N2T
S→NumE→NumT→NumN1→+N2→*
文法
![Page 205: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/205.jpg)
CYK algorithm [Cocke 1969, Younger 1967, Kasami 1965]
• 任意のCFGはChomsky標準形に自動変換可能
• 計算順序は変更可能 Ø 左から順番に計算すると Earley parsing とほぼ同じ
• 能力 Ø 計算量 : O(n3) Ø 言語 : Context-free language Ø 文法 : Context-free grammar (Chomsky標準形)
205
![Page 206: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/206.jpg)
Valiant parsing [Valiant 1975]
アイデア • CYKの表を行列とみなすと不動点問題に • 行列積を使いながら帰納法的に解ける
206
![Page 207: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/207.jpg)
207
![Page 208: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/208.jpg)
208
これらが同じとなる不動点を求める
![Page 209: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/209.jpg)
209
![Page 210: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/210.jpg)
210
![Page 211: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/211.jpg)
211
帰納法
帰納法
![Page 212: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/212.jpg)
212
![Page 213: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/213.jpg)
213
これらが同じなら良い
![Page 214: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/214.jpg)
214
![Page 215: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/215.jpg)
215
A1 A2
A3
X1 X2
X4X3
X1 X2
X4X3
B1 B2
B3
X1 X2
X4X3
C1 C2
C4C3
A X X B C X
✖ ︎ ➕︎ ✖ ︎ ➕︎ =︎
✖ ︎ ➕︎ ✖ ︎ ➕︎ =︎
![Page 216: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/216.jpg)
216
A3 X3 X3 B1 C3 X3
A1 A2
A3
X1 X2
X4X3
X1 X2
X4X3
B1 B2
B3
X1 X2
X4X3
C1 C2
C4C3
A X X B C X
✖ ︎ ➕︎ ✖ ︎ ➕︎ =︎
✖ ︎ ➕︎ ✖ ︎ ➕︎ =︎
✖ ︎ ➕︎ ✖ ︎ ➕︎ =︎
![Page 217: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/217.jpg)
217
A3 X3 X3 B1 C3 X3
帰納法
✖ ︎ ➕︎ ✖ ︎ ➕︎ =
A1 A2
A3
X1 X2
X4X3
X1 X2
X4X3
B1 B2
B3
X1 X2
X4X3
C1 C2
C4C3
A X X B C X
✖ ︎ ➕︎ ✖ ︎ ➕︎ =︎
✖ ︎ ➕︎ ✖ ︎ ➕︎ =︎
![Page 218: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/218.jpg)
218
A2 X3
A1 A2
A3
X1 X2
X4X3
X1 X2
X4X3
B1 B2
B3
X1 X2
X4X3
C1 C2
C4C3
A X X B C X
✖ ︎ ➕︎ ✖ ︎ ➕︎ =︎
✖ ︎ ➕︎ ✖ ︎ ➕︎ =︎
A1 X1 X1 B1 C1 X1 ✖ ︎ ➕︎ ✖ ︎ ➕︎ = ✖ ︎ ➕︎
![Page 219: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/219.jpg)
219
C1' A2 X3 C1
A1 A2
A3
X1 X2
X4X3
X1 X2
X4X3
B1 B2
B3
X1 X2
X4X3
C1 C2
C4C3
A X X B C X
✖ ︎ ➕︎ ✖ ︎ ➕︎ =︎
✖ ︎ ➕︎ ✖ ︎ ➕︎ =︎
A1 X1 X1 B1 C1' X1 ✖ ︎ ➕︎ ✖ ︎ ➕︎ =
✖ ︎ ➕︎ =
![Page 220: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/220.jpg)
220
C1' A2 X3 C1 帰納法
A1 A2
A3
X1 X2
X4X3
X1 X2
X4X3
B1 B2
B3
X1 X2
X4X3
C1 C2
C4C3
A X X B C X
✖ ︎ ➕︎ ✖ ︎ ➕︎ =︎
✖ ︎ ➕︎ ✖ ︎ ➕︎ =︎
A1 X1 X1 B1 C1' X1 ✖ ︎ ➕︎ ✖ ︎ ➕︎ =
✖ ︎ ➕︎ =
![Page 221: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/221.jpg)
221
A1 A2
A3
X1 X2
X4X3
X1 X2
X4X3
B1 B2
B3
X1 X2
X4X3
C1 C2
C4C3
A X X B C X
✖ ︎ ➕︎ ✖ ︎ ➕︎ =︎
✖ ︎ ➕︎ ✖ ︎ ➕︎ =︎
X4 = X3 B2 A3 X4 X4 B3 C4 ✖ ︎ ➕︎ ✖ ︎ ➕︎ ✖ ︎ ➕︎
![Page 222: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/222.jpg)
222
C4' X3 B2 C4
A1 A2
A3
X1 X2
X4X3
X1 X2
X4X3
B1 B2
B3
X1 X2
X4X3
C1 C2
C4C3
A X X B C X
✖ ︎ ➕︎ ✖ ︎ ➕︎ =︎
✖ ︎ ➕︎ ✖ ︎ ➕︎ =︎
A3 X4 X4 B3 C4' X4 ✖ ︎ ➕︎ ✖ ︎ ➕︎ =
✖ ︎ ➕︎ =
![Page 223: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/223.jpg)
223
C4' X3 B2 C4 帰納法
A1 A2
A3
X1 X2
X4X3
X1 X2
X4X3
B1 B2
B3
X1 X2
X4X3
C1 C2
C4C3
A X X B C X
✖ ︎ ➕︎ ✖ ︎ ➕︎ =︎
✖ ︎ ➕︎ ✖ ︎ ➕︎ =︎
A3 X4 X4 B3 C4' X4 ✖ ︎ ➕︎ ✖ ︎ ➕︎ =
✖ ︎ ➕︎ =
![Page 224: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/224.jpg)
224
X2 B3 C2
A1 A2
A3
X1 X2
X4X3
X1 X2
X4X3
B1 B2
B3
X1 X2
X4X3
C1 C2
C4C3
A X X B C X
✖ ︎ ➕︎ ✖ ︎ ➕︎ =︎
✖ ︎ ➕︎ ✖ ︎ ➕︎ =︎
X2 = ✖ ︎ ➕︎ X1 B2 ✖ ︎ ➕︎ A2 X4 ✖ ︎ ➕︎ A1 X2 ✖ ︎ ➕︎
![Page 225: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/225.jpg)
225
C2' X1 B2 C2
A1 A2
A3
X1 X2
X4X3
X1 X2
X4X3
B1 B2
B3
X1 X2
X4X3
C1 C2
C4C3
A X X B C X
✖ ︎ ➕︎ ✖ ︎ ➕︎ =︎
✖ ︎ ➕︎ ✖ ︎ ➕︎ =︎
A1 X2 X2 B3 C2' X2 ✖ ︎ ➕︎ ✖ ︎ ➕︎ =
✖ ︎ ➕︎ = A2 X4 ✖ ︎ ➕︎
![Page 226: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/226.jpg)
226
C2' X1 B2 C2 帰納法
A1 A2
A3
X1 X2
X4X3
X1 X2
X4X3
B1 B2
B3
X1 X2
X4X3
C1 C2
C4C3
A X X B C X
✖ ︎ ➕︎ ✖ ︎ ➕︎ =︎
✖ ︎ ➕︎ ✖ ︎ ➕︎ =︎
A1 X2 X2 B3 C2' X2 ✖ ︎ ➕︎ ✖ ︎ ➕︎ =
✖ ︎ ➕︎ = A2 X4 ✖ ︎ ➕︎
![Page 227: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/227.jpg)
227
A1 A2
A3
X1 X2
X4X3
X1 X2
X4X3
B1 B2
B3
X1 X2
X4X3
C1 C2
C4C3
A X X B C X
✖ ︎ ➕︎ ✖ ︎ ➕︎ =︎
✖ ︎ ➕︎ ✖ ︎ ➕︎ =︎
サイズが半分の問題4つと行列積で解ける!
→ 計算量は行列積の計算量に依存
![Page 228: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/228.jpg)
228
サイズが半分の問題2つと
行列積の計算量で解ける問題に分割可能
→ 計算量は行列積の計算量に依存
![Page 229: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/229.jpg)
Valiant parsing [Valiant 1975]
• 更に変形すると boolean 行列積に落ちる • 計算量の下限を示すものであり実用的ではない
• 能力 Ø 計算量 : O(np) (2 < p < 3, boolean 行列積の計算量) Ø 言語 : Context-free language Ø 文法 : Context-free grammar (Chomsky標準形)
229
![Page 230: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/230.jpg)
下向き構文解析 Top-down parsing
230
![Page 231: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/231.jpg)
231
LL(k) parsing [Sippu 1979] • 手書きではよく使われるが、表現力は少し弱い • k > 1 の場合は自動生成に向かない
Packrat parsing [Ford 2002] • 十分な表現力と解析速度を持つ • 曖昧性を持たないプログラミング言語の構文解析に適する
Packrat parsing with left recursion [Warth 2008] • 左再帰型の文法を扱えるように拡張したもの
GLL parsing [Scott 2010] • 下向き構文解析で CFG を O(n3) で解析する手法
Adaptive LL(*) parsing [Parr 2014] • LL(k) のアイデアを任意の CFG に適用
![Page 232: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/232.jpg)
LL(k) parsing [Sippu 1979]
アイデア • 分岐があるときは k 文字まで先読みして決める • 本当は怖い LL(k) parsing
232
E T E'
E' +
-
E'
E' =
=
![Page 233: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/233.jpg)
233
S→aaAaaS→abAbaA→bA→ε
文法
入力:abba
![Page 234: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/234.jpg)
234
S→aaAaaS→abAbaA→bA→ε
文法
入力:abba
LL(2)文法
![Page 235: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/235.jpg)
235
[S]|aa→[a][aa][aaA][aaAa][aaAaa]|aa[S]|ab→[a][ab][abA][abAb][abAba]|ab[aaA]|aa→|aa[aaA]|ba→[aab]|ba[abA]|ba→|ba[abA]|bb→[abb]|bb
actions
入力:abba
![Page 236: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/236.jpg)
236
[S]|aa→[a][aa][aaA][aaAa][aaAaa]|aa[S]|ab→[a][ab][abA][abAb][abAba]|ab[aaA]|aa→|aa[aaA]|ba→[aab]|ba[abA]|ba→|ba[abA]|bb→[abb]|bb
actions
入力:abba
先読み スタック 逆順で書く [xy] = z · y x
![Page 237: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/237.jpg)
237
[S]|aa→[a][aa][aaA][aaAa][aaAaa]|aa[S]|ab→[a][ab][abA][abAb][abAba]|ab[aaA]|aa→|aa[aaA]|ba→[aab]|ba[abA]|ba→|ba[abA]|bb→[abb]|bb
actions
[S]|abba
![Page 238: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/238.jpg)
238
[S]|aa→[a][aa][aaA][aaAa][aaAaa]|aa[S]|ab→[a][ab][abA][abAb][abAba]|ab[aaA]|aa→|aa[aaA]|ba→[aab]|ba[abA]|ba→|ba[abA]|bb→[abb]|bb
actions
[S]|abba
一致
![Page 239: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/239.jpg)
239
[S]|aa→[a][aa][aaA][aaAa][aaAaa]|aa[S]|ab→[a][ab][abA][abAb][abAba]|ab[aaA]|aa→|aa[aaA]|ba→[aab]|ba[abA]|ba→|ba[abA]|bb→[abb]|bb
actions
[S]|abba→[a][ab][abA][abAb][abAba]|abba
![Page 240: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/240.jpg)
240
[S]|aa→[a][aa][aaA][aaAa][aaAaa]|aa[S]|ab→[a][ab][abA][abAb][abAba]|ab[aaA]|aa→|aa[aaA]|ba→[aab]|ba[abA]|ba→|ba[abA]|bb→[abb]|bb
actions
[S]|abba→[a][ab][abA][abAb][abAba]|abba
一致
![Page 241: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/241.jpg)
241
[S]|aa→[a][aa][aaA][aaAa][aaAaa]|aa[S]|ab→[a][ab][abA][abAb][abAba]|ab[aaA]|aa→|aa[aaA]|ba→[aab]|ba[abA]|ba→|ba[abA]|bb→[abb]|bb
actions
[S]|abba→[a][ab][abA][abAb][abAba]|abba→[a][ab][abA][abAb]|bba
![Page 242: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/242.jpg)
242
[S]|aa→[a][aa][aaA][aaAa][aaAaa]|aa[S]|ab→[a][ab][abA][abAb][abAba]|ab[aaA]|aa→|aa[aaA]|ba→[aab]|ba[abA]|ba→|ba[abA]|bb→[abb]|bb
actions
[S]|abba→[a][ab][abA][abAb][abAba]|abba→[a][ab][abA][abAb]|bba
一致
![Page 243: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/243.jpg)
243
[S]|aa→[a][aa][aaA][aaAa][aaAaa]|aa[S]|ab→[a][ab][abA][abAb][abAba]|ab[aaA]|aa→|aa[aaA]|ba→[aab]|ba[abA]|ba→|ba[abA]|bb→[abb]|bb
actions
[S]|abba→[a][ab][abA][abAb][abAba]|abba→[a][ab][abA][abAb]|bba→[a][ab][abA]|ba
![Page 244: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/244.jpg)
244
[S]|aa→[a][aa][aaA][aaAa][aaAaa]|aa[S]|ab→[a][ab][abA][abAb][abAba]|ab[aaA]|aa→|aa[aaA]|ba→[aab]|ba[abA]|ba→|ba[abA]|bb→[abb]|bb
actions
[S]|abba→[a][ab][abA][abAb][abAba]|abba→[a][ab][abA][abAb]|bba→[a][ab][abA]|ba
一致
![Page 245: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/245.jpg)
245
[S]|aa→[a][aa][aaA][aaAa][aaAaa]|aa[S]|ab→[a][ab][abA][abAb][abAba]|ab[aaA]|aa→|aa[aaA]|ba→[aab]|ba[abA]|ba→|ba[abA]|bb→[abb]|bb
actions
[S]|abba→[a][ab][abA][abAb][abAba]|abba→[a][ab][abA][abAb]|bba→[a][ab][abA]|ba→[a][ab]|ba
![Page 246: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/246.jpg)
246
[S]|aa→[a][aa][aaA][aaAa][aaAaa]|aa[S]|ab→[a][ab][abA][abAb][abAba]|ab[aaA]|aa→|aa[aaA]|ba→[aab]|ba[abA]|ba→|ba[abA]|bb→[abb]|bb
actions
[S]|abba→[a][ab][abA][abAb][abAba]|abba→[a][ab][abA][abAb]|bba→[a][ab][abA]|ba→[a][ab]|ba
一致
![Page 247: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/247.jpg)
247
[S]|aa→[a][aa][aaA][aaAa][aaAaa]|aa[S]|ab→[a][ab][abA][abAb][abAba]|ab[aaA]|aa→|aa[aaA]|ba→[aab]|ba[abA]|ba→|ba[abA]|bb→[abb]|bb
actions
[S]|abba→[a][ab][abA][abAb][abAba]|abba→[a][ab][abA][abAb]|bba→[a][ab][abA]|ba→[a][ab]|ba→[a]|a
![Page 248: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/248.jpg)
248
[S]|aa→[a][aa][aaA][aaAa][aaAaa]|aa[S]|ab→[a][ab][abA][abAb][abAba]|ab[aaA]|aa→|aa[aaA]|ba→[aab]|ba[abA]|ba→|ba[abA]|bb→[abb]|bb
actions
[S]|abba→[a][ab][abA][abAb][abAba]|abba→[a][ab][abA][abAb]|bba→[a][ab][abA]|ba→[a][ab]|ba→[a]|a
一致
![Page 249: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/249.jpg)
249
[S]|aa→[a][aa][aaA][aaAa][aaAaa]|aa[S]|ab→[a][ab][abA][abAb][abAba]|ab[aaA]|aa→|aa[aaA]|ba→[aab]|ba[abA]|ba→|ba[abA]|bb→[abb]|bb
actions
[S]|abba→[a][ab][abA][abAb][abAba]|abba→[a][ab][abA][abAb]|bba→[a][ab][abA]|ba→[a][ab]|ba→[a]|a→|
![Page 250: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/250.jpg)
LL(k) parsing [Sippu 1979]
• LR と同様に SLL(k), LALL(k), LL(k) が存在 Ø SLL(k) [Rosenkrantz 1969] は先読みに前文脈を考慮しない
• 手書きの構文解析器は大抵 SLL(k) Ø SLL(1) = LALL(1) = LL(1) Ø 任意の LL(k) 文法は SLL(k) 文法に変形可能
• 能力 Ø 計算量 : O(n) Ø 言語 : LL(k) language Ø 文法 : SLL(k), LALL(k), LL(k)
250
![Page 251: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/251.jpg)
Packrat parsing [Ford 2002]
アイデア • 同じ開始位置に対して構文解析結果を一つに決める • メモ化再帰
251 * 画像引用: en.wikipedia.org/wiki/Pack_rat
![Page 252: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/252.jpg)
252
1 2 * + + 3 4 5
入力
$
0:E
E→T+EE→TT→Num*TT→Num
文法
*
![Page 253: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/253.jpg)
253
1 2 * + + 3 4 5
入力
$
+ E 0:T
0:E
E→T+EE→TT→Num*TT→Num
文法
*
![Page 254: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/254.jpg)
254
1 2 * + + 3 4 5
入力
$
* T
+ E
0:Num
0:T
0:E
E→T+EE→TT→Num*TT→Num
文法
*
![Page 255: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/255.jpg)
255
1 2 * + + 3 4 5
入力
$
~1: 1
* T
+ E
0:Num
0:T
0:E
E→T+EE→TT→Num*TT→Num
文法
*
![Page 256: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/256.jpg)
256
1 2 * + + 3 4 5
入力
$
~1: 1
T
+ E 0:T
0:E
1:* 0:Num
E→T+EE→TT→Num*TT→Num
文法
*
![Page 257: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/257.jpg)
257
1 2 * + + 3 4 5
入力
$
~1: 1
T
+ E 0:T
0:E
1:* 0:Num
~2: *
E→T+EE→TT→Num*TT→Num
文法
*
![Page 258: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/258.jpg)
258
1 2 * + + 3 4 5
入力
$
~1: 1
2:T
+ E 0:T
0:E
1:* 0:Num
~2: *
E→T+EE→TT→Num*TT→Num
文法
*
![Page 259: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/259.jpg)
259
1 2 * + + 3 4 5
入力
$
2:T
+ E 0:T
0:E
1:* 0:Num
* T 2:Num
E→T+EE→TT→Num*TT→Num
文法
*
![Page 260: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/260.jpg)
260
1 2 * + + 3 4 5
入力
$
2:T
+ E 0:T
0:E
1:* 0:Num
* T 2:Num
~3: 2
E→T+EE→TT→Num*TT→Num
文法
*
![Page 261: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/261.jpg)
261
1 2 * + + 3 4 5
入力
$
2:T
+ E 0:T
0:E
1:* 0:Num
T
~3: 2
E→T+EE→TT→Num*TT→Num
文法
3:* 2:Num
*
![Page 262: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/262.jpg)
262
E→T+EE→TT→Num*TT→Num
文法
1 2 * + + 3 4 5
入力
$
2:T
+ E 0:T
0:E
1:* 0:Num
T
~3: 2
3:* 2:Num
解析失敗
E→T+EE→TT→Num*TT→Num
文法
*
![Page 263: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/263.jpg)
263
1 2 * + + 3 4 5
入力
$
2:T
+ E 0:T
0:E
1:* 0:Num
3:*
2:Num
とっておく
E→T+EE→TT→Num*TT→Num
文法
バックトラックして 別の選択肢を試す
*
![Page 264: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/264.jpg)
264
1 2 * + + 3 4 5
入力
$
2:T
+ E 0:T
0:E
1:* 0:Num
2:Num
E→T+EE→TT→Num*TT→Num
文法
3:*
2:Num
一致
*
![Page 265: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/265.jpg)
265
1 2 * + + 3 4 5
入力
$
2:T
+ E 0:T
0:E
1:* 0:Num
2:Num
再利用 ~3: 2
E→T+EE→TT→Num*TT→Num
文法
3:*
*
![Page 266: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/266.jpg)
266
1 2 * + + 3 4 5
入力
$
2:T
+ E 0:T
0:E
1:* 0:Num
~3: 2
E→T+EE→TT→Num*TT→Num
文法
3:*
2:Num
とっておく
*
![Page 267: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/267.jpg)
267
1 2 * + + 3 4 5
入力
$
2:T
+ E 0:T
0:E
1:*
0:Num
~3: 2 1
*
E→T+EE→TT→Num*TT→Num
文法
3:*
2:Num
*
![Page 268: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/268.jpg)
268
1 2 * + + 3 4 5
入力
$
E
0:E
~3: 2 1
*
3:+ 0:T
E→T+EE→TT→Num*TT→Num
文法
2:T
1:*
0:Num
3:*
2:Num
*
![Page 269: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/269.jpg)
269
1 2 * + + 3 4 5
入力
$
4:E
0:E
3:+ 0:T
~4: +
E→T+EE→TT→Num*TT→Num
文法
2:T
1:*
0:Num
3:*
2:Num
*
![Page 270: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/270.jpg)
270
E→T+EE→TT→Num*TT→Num
文法
1 2 * + + 3 4 5
入力
$
4:E
0:E
3:+ 0:T
+ E 4:T 2:T
1:*
0:Num
3:*
2:Num
* T 4:Num
*
![Page 271: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/271.jpg)
271
E→T+EE→TT→Num*TT→Num
文法
1 2 * + + 3 4 5
入力
$
4:E
0:E
3:+ 0:T
+ E 4:T 2:T
1:*
0:Num
3:*
2:Num
T
~5: 3
5:* 4:Num
*
![Page 272: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/272.jpg)
272
E→T+EE→TT→Num*TT→Num
文法
1 2 * + + 3 4 5
入力
$
4:E
0:E
3:+ 0:T
+ E 4:T 2:T
1:*
0:Num
3:*
2:Num
T 5:* 4:Num
解析失敗
*
![Page 273: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/273.jpg)
273
E→T+EE→TT→Num*TT→Num
文法
1 2 * + + 3 4 5
入力
$
4:E
0:E
3:+ 0:T
+ E 4:T 2:T
1:*
0:Num
3:*
2:Num
5:*
4:Num
*
![Page 274: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/274.jpg)
274
E→T+EE→TT→Num*TT→Num
文法
1 2 * + + 3 4 5
入力
$
4:E
0:E
3:+ 0:T
+ E 4:T 2:T
1:*
0:Num
3:*
2:Num
5:* 4:Num
~5: 3
*
![Page 275: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/275.jpg)
275
E→T+EE→TT→Num*TT→Num
文法
1 2 * + + 3 * 4 5
入力
$
4:E
0:E
3:+ 0:T
E 2:T
1:*
0:Num
3:*
2:Num
5:* ~5: 3
4:Num
5:+ 4:T
![Page 276: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/276.jpg)
276
E→T+EE→TT→Num*TT→Num
文法
1 2 * + + 3 * 4 5
入力
$
4:E
0:E
3:+ 0:T
6:E 2:T
1:*
0:Num
3:*
2:Num
5:* ~6: +
4:Num
5:+ 4:T
![Page 277: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/277.jpg)
277
E→T+EE→TT→Num*TT→Num
文法
1 2 * + + 3 * 4 5
入力
$
4:E
0:E
3:+ 0:T
6:E 2:T
1:*
0:Num
3:*
2:Num
5:*
4:Num
5:+ 4:T
+ E 6:T
* T 6:Num
![Page 278: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/278.jpg)
278
E→T+EE→TT→Num*TT→Num
文法
1 2 * + + 3 * 4 5
入力
$
4:E
0:E
3:+ 0:T
6:E 2:T
1:*
0:Num
3:*
2:Num
5:*
4:Num
5:+ 4:T
+ E 6:T
T
~7: 3
7:* 6:Num
![Page 279: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/279.jpg)
279
E→T+EE→TT→Num*TT→Num
文法
1 2 * + + 3 * 4 5
入力
$
4:E
0:E
3:+ 0:T
6:E 2:T
1:*
0:Num
3:*
2:Num
5:*
4:Num
5:+ 4:T
+ E 6:T
8:T 7:* 6:Num
~8: *
![Page 280: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/280.jpg)
280
E→T+EE→TT→Num*TT→Num
文法
1 2 * + + 3 * 4 5
入力
$
4:E
0:E
3:+ 0:T
6:E 2:T
1:*
0:Num
3:*
2:Num
5:*
4:Num
5:+ 4:T
+ E 6:T
8:T 7:* 6:Num
* T 8:Num
![Page 281: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/281.jpg)
281
E→T+EE→TT→Num*TT→Num
文法
1 2 * + + 3 * 4 5
入力
$
4:E
0:E
3:+ 0:T
6:E 2:T
1:*
0:Num
3:*
2:Num
5:*
4:Num
5:+ 4:T
+ E 6:T
8:T 7:* 6:Num
T
~9: 5
9:* 8:Num
![Page 282: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/282.jpg)
282
E→T+EE→TT→Num*TT→Num
文法
1 2 * + + 3 * 4 5
入力
$
4:E
0:E
3:+ 0:T
6:E 2:T
1:*
0:Num
3:*
2:Num
5:*
4:Num
5:+ 4:T
+ E 6:T
8:T 7:* 6:Num
T 9:* 8:Num
解析失敗
![Page 283: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/283.jpg)
283
E→T+EE→TT→Num*TT→Num
文法
1 2 * + + 3 * 4 5
入力
$
4:E
0:E
3:+ 0:T
6:E 2:T
1:*
0:Num
3:*
2:Num
5:*
4:Num
5:+ 4:T
+ E 6:T
8:T 7:* 6:Num 9:*
8:Num
![Page 284: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/284.jpg)
284
E→T+EE→TT→Num*TT→Num
文法
1 2 * + + 3 * 4 5
入力
$
4:E
0:E
3:+ 0:T
6:E 2:T
1:*
0:Num
3:*
2:Num
5:*
4:Num
5:+ 4:T
+ E 6:T
8:T 7:* 6:Num 9:*
~9: 5
8:Num
![Page 285: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/285.jpg)
285
E→T+EE→TT→Num*TT→Num
文法
1 2 * + + 3 * 4 5
入力
$
4:E
0:E
3:+ 0:T
6:E 2:T
1:*
0:Num
3:*
2:Num
5:*
4:Num
5:+ 4:T
+ E 6:T
8:T 7:* 6:Num 9:*
~9: 5
8:Num
![Page 286: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/286.jpg)
286
E→T+EE→TT→Num*TT→Num
文法
1 2 * + + 3 * 4 5
入力
$
4:E
0:E
3:+ 0:T
6:E 2:T
1:*
0:Num
3:*
2:Num
5:*
4:Num
5:+ 4:T
E
8:T
7:*
6:Num
9:*
8:Num
~9: 5 4
*
9:+ 6:T
![Page 287: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/287.jpg)
287
E→T+EE→TT→Num*TT→Num
文法
1 2 * + + 3 * 4 5
入力
$
4:E
0:E
3:+ 0:T
6:E 2:T
1:*
0:Num
3:*
2:Num
5:*
4:Num
5:+ 4:T
E
8:T
7:*
6:Num
9:*
8:Num
9:+ 6:T
解析失敗
![Page 288: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/288.jpg)
288
E→T+EE→TT→Num*TT→Num
文法
1 2 * + + 3 * 4 5
入力
$
4:E
0:E
3:+ 0:T
6:E 2:T
1:*
0:Num
3:*
2:Num
5:*
4:Num
5:+ 4:T
8:T
7:*
6:Num
9:*
8:Num
9:+
6:T
![Page 289: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/289.jpg)
289
E→T+EE→TT→Num*TT→Num
文法
1 2 * + + 3 * 4 5
入力
$
4:E
0:E
3:+ 0:T
6:E 2:T
1:*
0:Num
3:*
2:Num
5:*
4:Num
5:+ 4:T
8:T
7:*
6:Num
9:*
8:Num
9:+
~9: 5 4
*
6:T
![Page 290: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/290.jpg)
290
E→T+EE→TT→Num*TT→Num
文法
1 2 * + + 3 * 4 5
入力
$
4:E
0:E
3:+ 0:T
6:E 2:T
1:*
0:Num
3:*
2:Num
5:*
4:Num
5:+ 4:T
8:T
7:*
6:Num
9:*
8:Num
9:+
~9: 5 4
*
6:T
![Page 291: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/291.jpg)
291
E→T+EE→TT→Num*TT→Num
文法
1 2 * + + 3 * 4 5
入力
$
4:E
0:E
3:+ 0:T
6:E
2:T
1:*
0:Num
3:*
2:Num
5:*
4:Num
5:+
4:T
8:T
7:*
6:Num
9:*
8:Num
9:+
~9:
5 4
*
6:T
+
3
![Page 292: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/292.jpg)
292
E→T+EE→TT→Num*TT→Num
文法
1 2 * + + 3 * 4 5
入力
$
4:E 0:E
3:+
0:T
6:E
2:T
1:*
0:Num
3:*
2:Num
5:*
4:Num
5:+
4:T
8:T
7:*
6:Num
9:*
8:Num
9:+ ~9:
6:T
2 1
*
5 4
*
+
3
+
![Page 293: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/293.jpg)
Packrat parsing [Ford 2002]
• SLL(k) で k → ∞ したものとみなせる Ø 文脈を無視して無限先読みして分岐を一つに決定する Ø 何らかの方法で一つに決まりさえすれば良い Ø LL(*) [Parr 2011] は可能なら SLL(k) で分岐するもの
• 動的計画法でも同様の解析は可能 Ø 入力の後ろから順にたどって表を作る
• 能力 Ø 計算量 : O(n) Ø 言語 : Parsing expression language Ø 文法 : Parsing expression grammar
293
![Page 294: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/294.jpg)
Packrat parsing with left recursion [Warth 2008]
アイデア • 構文解析中に左再帰検出 • 左再帰部は成長しなくなるまで繰り返し適用
294
![Page 295: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/295.jpg)
295
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
動的計画法ベースで説明する。
下向き構文解析と言えないかも?
![Page 296: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/296.jpg)
296
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:
*:
Num:
T:
E:
終端記号
非終端記号
![Page 297: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/297.jpg)
297
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:なし
Num:なし
T:
E:
終端記号
非終端記号
入力を読む
![Page 298: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/298.jpg)
298
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:なし
Num:なし
T:なし
E:
終端記号
非終端記号
文法を見る
![Page 299: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/299.jpg)
299
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:なし
Num:なし
T:なし
E:なし
終端記号
非終端記号
文法を見る
![Page 300: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/300.jpg)
300
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:
*:
Num:
T:
E:
![Page 301: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/301.jpg)
301
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:なし
Num:5
T:
E:
入力を読む
![Page 302: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/302.jpg)
302
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:なし
Num:5
T:5
E:
文法を見る
![Page 303: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/303.jpg)
303
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:なし
Num:5
T:5
E:5
文法を見る
![Page 304: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/304.jpg)
304
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:なし
Num:5
T:5
E:5
もう一度文法を見る
更新不可
![Page 305: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/305.jpg)
305
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:
*:
Num:
T:
E:
![Page 306: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/306.jpg)
306
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:*
Num:なし
T:
E:
入力を読む
![Page 307: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/307.jpg)
307
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:*
Num:なし
T:なし
E:なし
文法を見る
![Page 308: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/308.jpg)
308
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:
*:
Num:
T:
E:
![Page 309: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/309.jpg)
309
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:なし
Num:4
T:
E:
入力を読む
![Page 310: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/310.jpg)
310
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:なし
Num:4
T:4
E:
文法を見る
![Page 311: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/311.jpg)
311
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:なし
Num:4
T:4
E:4
文法を見る
![Page 312: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/312.jpg)
312
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:なし
Num:4
T:4*5
E:4
もう一度文法を見る
*:* Num:5
![Page 313: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/313.jpg)
313
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:なし
Num:4
T:4*5
E:4*5
もう一度文法を見る
![Page 314: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/314.jpg)
314
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:なし
Num:4
T:4*5
E:4*5
更にもう一度文法を見る
更新不可
![Page 315: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/315.jpg)
315
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:+
*:なし
Num:なし
T:
E:
以降同様に進める
![Page 316: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/316.jpg)
316
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:+
*:なし
Num:なし
T:なし
E:
![Page 317: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/317.jpg)
317
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:+
*:なし
Num:なし
T:なし
E:なし
![Page 318: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/318.jpg)
318
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:なし
Num:3
T:
E:
![Page 319: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/319.jpg)
319
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:なし
Num:3
T:3
E:
![Page 320: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/320.jpg)
320
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:なし
Num:3
T:3
E:3
![Page 321: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/321.jpg)
321
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:なし
Num:3
T:3
E:3+(4*5)
+:+ T:4*5
もう一度
![Page 322: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/322.jpg)
322
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:なし
Num:3
T:3
E:3+(4*5)
更にもう一度
更新不可
![Page 323: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/323.jpg)
323
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:+
*:なし
Num:なし
T:
E:
![Page 324: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/324.jpg)
324
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:+
*:なし
Num:なし
T:なし
E:
![Page 325: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/325.jpg)
325
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:+
*:なし
Num:なし
T:なし
E:なし
![Page 326: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/326.jpg)
326
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:なし
Num:2
T:
E:
![Page 327: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/327.jpg)
327
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:なし
Num:2
T:2
E:
![Page 328: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/328.jpg)
328
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:なし
Num:2
T:2
E:2
![Page 329: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/329.jpg)
329
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:なし
Num:2
T:2
E:2+3
もう一度
+:+ T:3
![Page 330: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/330.jpg)
330
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:なし
Num:2
T:2
E:(2+3)+(4*5)
更にもう一度
+:+ T:4*5
![Page 331: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/331.jpg)
331
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:なし
Num:2
T:2
E:(2+3)+(4*5)
更に更にもう一度
更新不可
![Page 332: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/332.jpg)
332
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:*
Num:なし
T:
E:
![Page 333: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/333.jpg)
333
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:*
Num:なし
T:なし
E:
![Page 334: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/334.jpg)
334
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:*
Num:なし
T:なし
E:なし
![Page 335: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/335.jpg)
335
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:なし
Num:1
T:
E:
![Page 336: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/336.jpg)
336
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:なし
Num:1
T:1
E:
![Page 337: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/337.jpg)
337
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:なし
Num:1
T:1
E:1
![Page 338: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/338.jpg)
338
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:なし
Num:1
T:1*2
E:1
もう一度
*:* Num:2
![Page 339: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/339.jpg)
339
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:なし
Num:1
T:1*2
E:1*2
もう一度
![Page 340: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/340.jpg)
340
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:なし
Num:1
T:1*2
E:(1*2)+3
更にもう一度
+:+ T:3
![Page 341: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/341.jpg)
341
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:なし
Num:1
T:1*2
E:((1*2)+3)+(4*5)
更に更にもう一度
+:+ T:4*5
![Page 342: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/342.jpg)
342
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:なし
Num:1
T:1*2
E:((1*2)+3)+(4*5)
更に更に更にもう一度
更新不可
![Page 343: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/343.jpg)
343
E→E+TE→TT→T*NumT→Num
文法
1 2 * + + 3 * 4 5 入力
$
+:なし
*:なし
Num:1
T:1*2
E:((1*2)+3)+(4*5)終了
![Page 344: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/344.jpg)
Packrat parsing with left recursion [Warth 2008]
• メモ化再帰ベースの方がやや効率が良い Ø 実装は難しい。論文のやつバグってない?
• 大抵のケースで計算量は O(n) Ø メモ化が無駄になるケースは計算量が悪化 Ø 現実的な文法には最悪ケースはほぼ出現しないらしい
• 能力 Ø 計算量 : O(n2) (論文にははっきりとは書いてないがたぶん) Ø 言語 : Parsing expression language Ø 文法 : 左再帰を含む Parsing expression grammar
344
![Page 345: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/345.jpg)
GLL parsing [Scott 2010]
アイデア • グラフ構造の継続を利用 • 幅優先探索
345
0:E=·E+E 0:S=·E$
0:E=·T
0:T=·T*T
0:T=·Num
![Page 346: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/346.jpg)
346
0:·E$
1 2 * + + 3 4
入力
$
S→EE→E+EE→TT→T*TT→Num
文法
![Page 347: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/347.jpg)
347
0:·E+E
0:·E$
0:·T
1 2 * + + 3 4
入力
$
S→EE→E+EE→TT→T*TT→Num
文法
![Page 348: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/348.jpg)
348
0:·E+E
0:·E$
0:·T
1 2 * + + 3 4
入力
$
S→EE→E+EE→TT→T*TT→Num
文法
![Page 349: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/349.jpg)
349
0:·E+E
0:·E$
0:·T
0:·T*T
0:·Num
1 2 * + + 3 4
入力
$
S→EE→E+EE→TT→T*TT→Num
文法
![Page 350: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/350.jpg)
350
0:·E+E
0:·E$
0:·T
0:·T*T
0:·Num
1 2 * + + 3 4
入力
$
S→EE→E+EE→TT→T*TT→Num
文法
![Page 351: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/351.jpg)
351
0:·E+E
0:·E$
0:·T
0:·T*T
0:·Num 1:Num·
1 2 * + + 3 4
入力
$
S→EE→E+EE→TT→T*TT→Num
文法
![Page 352: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/352.jpg)
352
0:·E+E
0:·E$
0:·T
0:·T*T
0:·Num 1:Num·
1:T·*T
1:T·
1 2 * + + 3 4
入力
$
S→EE→E+EE→TT→T*TT→Num
文法
![Page 353: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/353.jpg)
353
0:·E+E
0:·E$
0:·T
0:·T*T
0:·Num 1:Num·
1:T·*T
1:T·
1:E·+E
1:E·$
1 2 * + + 3 4
入力
$
S→EE→E+EE→TT→T*TT→Num
文法
![Page 354: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/354.jpg)
354
0:·E+E
0:·E$
0:·T
0:·T*T
0:·Num 1:Num·
1:T·*T
1:T·
1:E·+E
1:E·$
1 2 * + + 3 4
入力
$
S→EE→E+EE→TT→T*TT→Num
文法
![Page 355: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/355.jpg)
355
0:·E+E
0:·E$
0:·T
0:·T*T
0:·Num 1:Num·
1:T·*T
1:T·
1:E·+E
1:E·$
1 2 * + + 3 4
入力
$
S→EE→E+EE→TT→T*TT→Num
文法
![Page 356: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/356.jpg)
356
0:·E+E
0:·E$
0:·T
0:·T*T
0:·Num 1:Num·
1:T·*T
1:T·
1:E·+E
1:E·$
2:T*·T
1 2 * + + 3 4
入力
$
S→EE→E+EE→TT→T*TT→Num
文法
![Page 357: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/357.jpg)
357
0:·E+E
0:·E$
0:·T
0:·T*T
0:·Num 1:Num·
1:T·*T
1:T·
1:E·+E
1:E·$
2:T*·T
2:·T*T
2:·Num 1 2 * + + 3 4
入力
$
S→EE→E+EE→TT→T*TT→Num
文法
![Page 358: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/358.jpg)
358
0:·E+E
0:·E$
0:·T
0:·T*T
0:·Num 1:Num·
1:T·*T
1:T·
1:E·+E
1:E·$
2:T*·T
2:·T*T
2:·Num 1 2 * + + 3 4
入力
$
S→EE→E+EE→TT→T*TT→Num
文法
![Page 359: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/359.jpg)
359
0:·E+E
0:·E$
0:·T
0:·T*T
0:·Num 1:Num·
1:T·*T
1:T·
1:E·+E
1:E·$
2:T*·T
2:·T*T
2:·Num 3:Num· 1 2 * + + 3 4
入力
$
S→EE→E+EE→TT→T*TT→Num
文法
![Page 360: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/360.jpg)
360
0:·E+E
0:·E$
0:·T
0:·T*T
0:·Num 1:Num·
1:T·*T
1:T·
1:E·+E
1:E·$
2:T*·T 3:T*T·
2:·T*T
2:·Num 3:Num·
3:T·*T
1 2 * + + 3 4
入力
$
S→EE→E+EE→TT→T*TT→Num
文法
![Page 361: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/361.jpg)
361
0:·E+E
0:·E$
0:·T
0:·T*T
0:·Num 1:Num·
1:T·*T
1:T·
1:E·+E
1:E·$
2:T*·T 3:T*T·
2:·T*T
2:·Num 3:Num·
3:T·*T
3:T·
1 2 * + + 3 4
入力
$
S→EE→E+EE→TT→T*TT→Num
文法
![Page 362: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/362.jpg)
362
0:·E+E
0:·E$
0:·T
0:·T*T
0:·Num 1:Num·
1:T·*T
1:T·
1:E·+E
1:E·$
2:T*·T 3:T*T·
2:·T*T
2:·Num 3:Num·
3:T·*T
3:T·
3:E·+E
3:E·$
1 2 * + + 3 4
入力
$
S→EE→E+EE→TT→T*TT→Num
文法
![Page 363: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/363.jpg)
363
0:·E+E
0:·E$
0:·T
0:·T*T
0:·Num 1:Num·
1:T·*T
1:T·
1:E·+E
1:E·$
2:T*·T 3:T*T·
2:·T*T
2:·Num 3:Num·
3:T·*T
3:T·
3:E·+E
3:E·$
1 2 * + + 3 4
入力
$
S→EE→E+EE→TT→T*TT→Num
文法
![Page 364: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/364.jpg)
364
0:·E+E
0:·E$
0:·T
0:·T*T
0:·Num 1:Num·
1:T·*T
1:T·
1:E·+E
1:E·$
2:T*·T 3:T*T·
2:·T*T
2:·Num 3:Num·
3:T·*T
3:T·
3:E·+E 4:E+·E
3:E·$
1 2 * + + 3 4
入力
$
S→EE→E+EE→TT→T*TT→Num
文法
![Page 365: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/365.jpg)
365
0:·E+E
0:·E$
0:·T
0:·T*T
0:·Num 1:Num·
1:T·*T
1:T·
1:E·+E
1:E·$
2:T*·T 3:T*T·
2:·T*T
2:·Num 3:Num·
3:T·*T
3:T·
3:E·+E 4:E+·E
3:E·$
1 2 * + + 3 4
入力
$
S→EE→E+EE→TT→T*TT→Num
文法
![Page 366: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/366.jpg)
366
1 2 * + + 3 4
入力
$
0:·E+E
0:·E$
3:E·+E 4:E+·E
S→EE→E+EE→TT→T*TT→Num
文法
![Page 367: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/367.jpg)
367
1 2 * + + 3 4
入力
$
0:·E+E
0:·E$
3:E·+E 4:E+·E
4:·E+E
4:·T S→EE→E+EE→TT→T*TT→Num
文法
![Page 368: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/368.jpg)
368
1 2 * + + 3 4
入力
$
0:·E+E
0:·E$
3:E·+E 4:E+·E
4:·E+E
4:·T S→EE→E+EE→TT→T*TT→Num
文法
![Page 369: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/369.jpg)
369
1 2 * + + 3 4
入力
$
0:·E+E
0:·E$
3:E·+E 4:E+·E
4:·E+E
4:·T
4:·T*T
4:·Num
S→EE→E+EE→TT→T*TT→Num
文法
![Page 370: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/370.jpg)
370
1 2 * + + 3 4
入力
$
0:·E+E
0:·E$
3:E·+E 4:E+·E
4:·E+E
4:·T
4:·T*T
4:·Num
S→EE→E+EE→TT→T*TT→Num
文法
![Page 371: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/371.jpg)
371
1 2 * + + 3 4
入力
$
0:·E+E
0:·E$
3:E·+E 4:E+·E
4:·E+E
4:·T
4:·T*T
4:·Num 5:Num·
S→EE→E+EE→TT→T*TT→Num
文法
![Page 372: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/372.jpg)
372
1 2 * + + 3 4
入力
$
0:·E+E
0:·E$
3:E·+E 4:E+·E
4:·E+E
4:·T
4:·T*T
4:·Num 5:Num·
5:T·*T
5:T· S→EE→E+EE→TT→T*TT→Num
文法
![Page 373: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/373.jpg)
373
1 2 * + + 3 4
入力
$
0:·E+E
0:·E$
3:E·+E 4:E+·E
4:·E+E
4:·T
4:·T*T
4:·Num 5:Num·
5:T·*T
5:T·
5:E·+E
5:E+E·
S→EE→E+EE→TT→T*TT→Num
文法
![Page 374: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/374.jpg)
374
1 2 * + + 3 4
入力
$
0:·E+E
0:·E$
3:E·+E 4:E+·E
4:·E+E
4:·T
4:·T*T
4:·Num 5:Num·
5:T·*T
5:T·
5:E·+E
5:E+E·
5:E·$
S→EE→E+EE→TT→T*TT→Num
文法
![Page 375: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/375.jpg)
375
1 2 * + + 3 4
入力
$
0:·E+E
0:·E$
3:E·+E 4:E+·E
4:·E+E
4:·T
4:·T*T
4:·Num 5:Num·
5:T·*T
5:T·
5:E·+E
5:E+E·
5:E·$
S→EE→E+EE→TT→T*TT→Num
文法
![Page 376: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/376.jpg)
376
1 2 * + + 3 4
入力
$
0:·E+E
0:·E$
3:E·+E 4:E+·E
4:·E+E
4:·T
4:·T*T
4:·Num 5:Num·
5:T·*T
5:T·
5:E·+E
5:E+E·
5:E·$
6:E+·E
S→EE→E+EE→TT→T*TT→Num
文法
![Page 377: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/377.jpg)
377
1 2 * + + 3 4
入力
$
0:·E+E
0:·E$
3:E·+E 4:E+·E
4:·E+E
4:·T
4:·T*T
4:·Num 5:Num·
5:T·*T
5:T·
5:E·+E
5:E+E·
5:E·$
6:E+·E
S→EE→E+EE→TT→T*TT→Num
文法
![Page 378: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/378.jpg)
378
1 2 * + + 3 4
入力
$
0:·E+E
0:·E$
3:E·+E 4:E+·E
4:·E+E 5:E·+E
5:E+E·
6:E+·E
S→EE→E+EE→TT→T*TT→Num
文法
![Page 379: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/379.jpg)
379
1 2 * + + 3 4
入力
$
0:·E+E
0:·E$
3:E·+E 4:E+·E
4:·E+E 5:E·+E
5:E+E·
6:E+·E
6:·E+E
6:·T
S→EE→E+EE→TT→T*TT→Num
文法
![Page 380: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/380.jpg)
380
1 2 * + + 3 4
入力
$
0:·E+E
0:·E$
3:E·+E 4:E+·E
4:·E+E 5:E·+E
5:E+E·
6:E+·E
6:·E+E
6:·T
S→EE→E+EE→TT→T*TT→Num
文法
![Page 381: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/381.jpg)
381
1 2 * + + 3 4
入力
$
0:·E+E
0:·E$
3:E·+E 4:E+·E
4:·E+E 5:E·+E
5:E+E·
6:E+·E
6:·E+E
6:·T
6:·T*T
6:·Num
S→EE→E+EE→TT→T*TT→Num
文法
![Page 382: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/382.jpg)
382
1 2 * + + 3 4
入力
$
0:·E+E
0:·E$
3:E·+E 4:E+·E
4:·E+E 5:E·+E
5:E+E·
6:E+·E
6:·E+E
6:·T
6:·T*T
6:·Num
S→EE→E+EE→TT→T*TT→Num
文法
![Page 383: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/383.jpg)
383
1 2 * + + 3 4
入力
$
0:·E+E
0:·E$
3:E·+E 4:E+·E
4:·E+E 5:E·+E
5:E+E·
6:E+·E
6:·E+E
6:·T
6:·T*T
6:·Num 7:Num·
S→EE→E+EE→TT→T*TT→Num
文法
![Page 384: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/384.jpg)
384
1 2 * + + 3 4
入力
$
0:·E+E
0:·E$
3:E·+E 4:E+·E
4:·E+E 5:E·+E
5:E+E·
6:E+·E
6:·E+E
6:·T
6:·T*T
6:·Num 7:Num·
7:T·*T
7:T·
S→EE→E+EE→TT→T*TT→Num
文法
![Page 385: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/385.jpg)
385
1 2 * + + 3 4
入力
$
0:·E+E
0:·E$
3:E·+E 4:E+·E
4:·E+E 5:E·+E
5:E+E·
6:E+·E
6:·E+E
6:·T
6:·T*T
6:·Num 7:Num·
7:T·*T
7:T·
7:E·+E
7:E+E·
S→EE→E+EE→TT→T*TT→Num
文法
![Page 386: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/386.jpg)
386
1 2 * + + 3 4
入力
$
0:·E+E
0:·E$
3:E·+E 4:E+·E
4:·E+E 5:E·+E
5:E+E·
6:E+·E
6:·E+E
6:·T
6:·T*T
6:·Num 7:Num·
7:T·*T
7:T·
7:E·+E
7:E+E·
7:E·$
S→EE→E+EE→TT→T*TT→Num
文法
![Page 387: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/387.jpg)
387
1 2 * + + 3 4
入力
$
0:·E+E
0:·E$
3:E·+E 4:E+·E
4:·E+E 5:E·+E
5:E+E·
6:E+·E
6:·E+E
6:·T
6:·T*T
6:·Num 7:Num·
7:T·*T
7:T·
7:E·+E
7:E+E·
7:E·$ 8:E$·
S→EE→E+EE→TT→T*TT→Num
文法
![Page 388: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/388.jpg)
388
1 2 * + + 3 4
入力
$
0:·E+E
0:·E$
3:E·+E 4:E+·E
4:·E+E 5:E·+E
5:E+E·
6:E+·E
6:·E+E
6:·T
6:·T*T
6:·Num 7:Num·
7:T·*T
7:T·
7:E·+E
7:E+E·
7:E·$ 8:E$·
S→EE→E+EE→TT→T*TT→Num
文法
![Page 389: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/389.jpg)
389
1 2 * + + 3 4
入力
$
0:·E+E
0:·E$
3:E·+E 4:E+·E
4:·E+E 5:E·+E
5:E+E·
6:E+·E
6:·E+E
6:·T
6:·T*T
6:·Num 7:Num·
7:T·*T
7:T·
7:E·+E
7:E+E·
7:E·$ 8:E$·
S→EE→E+EE→TT→T*TT→Num
文法
![Page 390: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/390.jpg)
GLL parsing [Scott 2010]
• パーサコンビネータとして実装可能
• LL(k) grammar に対しては O(n) で動作する
• 能力 Ø 計算量 : O(n3) Ø 言語 : Context-free language Ø 文法 : Context-free grammar
390
![Page 391: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/391.jpg)
Adaptive LL(*) parsing [Parr 2014]
アイデア • 先読みオートマトンにより分岐を選択する Ø バックトラックを避けることで高速化を図る Ø ここまでは LL(*) のアイデア
• 動的に先読みオートマトンを作る Ø 入力言語は有限集合なので、先読み言語は常に正規
391
Num Num
+
* -
![Page 392: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/392.jpg)
392
E→T+EE→TT→Num*TT→Num
文法
1 2 * + + 3 * 4 5 入力
$
![Page 393: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/393.jpg)
393
Augmented transition networks (ATNs)
1 2 * + + 3 * 4 5 入力
$
T
T1
T2
ε
ε
T11 Num * T
T12 T13
T21 Num
T'
ε
ε
E
E1
E2
ε
ε
E11 T + E
E12 E13
E21 T
E'
ε
ε
S S1 E
S2 $
S' ε
![Page 394: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/394.jpg)
394
1 2 * + + 3 * 4 5 入力
$
0:E
![Page 395: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/395.jpg)
395
1 2 * + + 3 * 4 5 入力
$
E
E1
E2
ε
ε
E11 T + E
E12 E13
E21 T
E'
ε
ε どちらの分岐か 先読みして選ぶ
0:E
![Page 396: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/396.jpg)
396
1 2 * + + 3 * 4 5 入力
$
1→E12→E2
T
T1
T2
ε
ε
T11 Num * T
T12 T13
T21 Num
T'
ε
ε
E
E1
E2
ε
ε
E11 T + E
E12 E13
E21 T
E'
ε
ε S S1
E S2
$ S'
ε
ATN上の状態
選んだ分岐
![Page 397: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/397.jpg)
397
1 2 * + + 3 * 4 5 入力
$
1→E1T1T22→E2T1T2
T
T1
T2
ε
ε
T11 Num * T
T12 T13
T21 Num
T'
ε
ε
E
E1
E2
ε
ε
E11 T + E
E12 E13
E21 T
E'
ε
ε S S1
E S2
$ S'
ε
ε遷移で到達可能
![Page 398: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/398.jpg)
398
1 2 * + + 3 * 4 5 入力
$
1→E1T1T22→E2T1T2
1→T11T21
2→T11T21 Num
T
T1
T2
ε
ε
T11 Num * T
T12 T13
T21 Num
T'
ε
ε
E
E1
E2
ε
ε
E11 T + E
E12 E13
E21 T
E'
ε
ε S S1
E S2
$ S'
ε
先読み
![Page 399: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/399.jpg)
399
1 2 * + + 3 * 4 5 入力
$
1→E1T1T22→E2T1T2
1→T11T21E11
2→T11T21E21 Num
T
T1
T2
ε
ε
T11 Num * T
T12 T13
T21 Num
T'
ε
ε
E
E1
E2
ε
ε
E11 T + E
E12 E13
E21 T
E'
ε
ε S S1
E S2
$ S'
ε
reduce 操作
呼び出しスタック情報を利用して、 reduce 対象を判別する
![Page 400: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/400.jpg)
400
1 2 * + + 3 * 4 5 入力
$
1→E1T1T22→E2T1T2
1→T11T21E11
2→T11T21E21E13S1 Num
T
T1
T2
ε
ε
T11 Num * T
T12 T13
T21 Num
T'
ε
ε
E
E1
E2
ε
ε
E11 T + E
E12 E13
E21 T
E'
ε
ε S S1
E S2
$ S'
ε
外側の文脈は不明なので、 E による遷移の右辺を追加する
reduce 操作
![Page 401: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/401.jpg)
401
1 2 * + + 3 * 4 5 入力
$
1→E1T1T22→E2T1T2
1→T11T21E11
2→T11T21E21E13S1 Num 1→T12
2→T12 *
T
T1
T2
ε
ε
T11 Num * T
T12 T13
T21 Num
T'
ε
ε
E
E1
E2
ε
ε
E11 T + E
E12 E13
E21 T
E'
ε
ε S S1
E S2
$ S'
ε
![Page 402: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/402.jpg)
402
1 2 * + + 3 * 4 5 入力
$
1→E1T1T22→E2T1T2
1→T11T21E11
2→T11T21E21E13S1 Num 1→T12T1T2
2→T12T1T2 *
Num * T
T
T1
T2
ε
ε
T11 T12 T13
T21 Num
T'
ε
ε
E
E1
E2
ε
ε
E11 T + E
E12 E13
E21 T
E'
ε
ε S S1
E S2
$ S'
ε
ε遷移で到達可能
![Page 403: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/403.jpg)
403
1 2 * + + 3 * 4 5 入力
$
1→E1T1T22→E2T1T2
1→T11T21E11
2→T11T21E21E13S1 Num 1→T12T1T2
2→T12T1T2 *
1→T11T21
2→T11T21
T
T1
T2
ε
ε
T11 Num * T
T12 T13
T21 Num
T'
ε
ε
E
E1
E2
ε
ε
E11 T + E
E12 E13
E21 T
E'
ε
ε
Num
S S1 E
S2 $
S' ε
![Page 404: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/404.jpg)
404
1 2 * + + 3 * 4 5 入力
$
1→E1T1T22→E2T1T2
1→T11T21E11
2→T11T21E21E13S1 Num 1→T12T1T2
2→T12T1T2 *
1→T11T21T13E11
2→T11T21T13E21
T
T1
T2
ε
ε
T11 Num * T
T12 T13
T21 Num
T'
ε
ε
E
E1
E2
ε
ε
E11 T + E
E12 E13
E21 T
E'
ε
ε
Num
S S1 E
S2 $
S' ε
reduce 操作
![Page 405: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/405.jpg)
405
1 2 * + + 3 * 4 5 入力
$
1→E1T1T22→E2T1T2
1→T11T21E11
2→T11T21E21E13S1 Num 1→T12T1T2
2→T12T1T2 *
1→T11T21T13E11
2→T11T21T13E21E13S1
T
T1
T2
ε
ε
T11 Num * T
T12 T13
T21 Num
T'
ε
ε
E
E1
E2
ε
ε
E11 T + E
E12 E13
E21 T
E'
ε
ε
Num
S S1 E
S2 $
S' ε
reduce 操作
![Page 406: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/406.jpg)
406
1 2 * + + 3 * 4 5 入力
$
1→E1T1T22→E2T1T2
1→T11T21E11
2→T11T21E21E13S1 Num 1→T12T1T2
2→T12T1T2 *
1→T11T21T13E11
2→T11T21T13E21E13S1
T
T1
T2
ε
ε
T11 Num * T
T12 T13
T21 Num
T'
ε
ε
E
E1
E2
ε
ε
E11 T + E
E12 E13
E21 T
E'
ε
ε
Num
1→E122→
+
S S1 E
S2 $
S' ε
![Page 407: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/407.jpg)
407
1 2 * + + 3 * 4 5 入力
$
1→E1T1T22→E2T1T2
1→T11T21E11
2→T11T21E21E13S1 Num 1→T12T1T2
2→T12T1T2 *
1→T11T21T13E11
2→T11T21T13E21E13S1
T
T1
T2
ε
ε
T11 Num * T
T12 T13
T21 Num
T'
ε
ε
E
E1
E2
ε
ε
E11 T + E
E12 E13
E21 T
E'
ε
ε
Num
1→E12E1E22→
+
S S1 E
S2 $
S' ε
ε遷移
![Page 408: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/408.jpg)
408
1 2 * + + 3 * 4 5 入力
$
1→E1T1T22→E2T1T2
1→T11T21E11
2→T11T21E21E13S1 Num 1→T12T1T2
2→T12T1T2 *
1→T11T21T13E11
2→T11T21T13E21E13S1
T
T1
T2
ε
ε
T11 Num * T
T12 T13
T21 Num
T'
ε
ε
E
E1
E2
ε
ε
E11 T + E
E12 E13
E21 T
E'
ε
ε
Num
1→E12E1E2T1T22→
+
S S1 E
S2 $
S' ε
ε遷移
![Page 409: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/409.jpg)
409
1 2 * + + 3 * 4 5 入力
$
1→E1T1T22→E2T1T2
1→T11T21E11
2→T11T21E21E13S1 Num 1→T12T1T2
2→T12T1T2 *
1→T11T21T13E11
2→T11T21T13E21E13S1
T
T1
T2
ε
ε
T11 Num * T
T12 T13
T21 Num
T'
ε
ε
E
E1
E2
ε
ε
E11 T + E
E12 E13
E21 T
E'
ε
ε
Num
1→E12E1E2T1T22→
+
S S1 E
S2 $
S' ε
![Page 410: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/410.jpg)
410
1 2 * + + 3 * 4 5 入力
$
Num * Num 1
+
E の先読みオートマトン
0:E
![Page 411: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/411.jpg)
+ E
411
1 2 * + + 3 * 4 5 入力
$
0:E
Num * Num 1
+
E の先読みオートマトン
0:T
![Page 412: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/412.jpg)
+ E
412
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
どちらの分岐か選ぶ
T
T1
T2
ε
ε
T11 Num * T
T12 T13
T21 Num
T'
ε
ε
![Page 413: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/413.jpg)
413
1 2 * + + 3 * 4 5 入力
$
T
T1
T2
ε
ε
T11 Num * T
T12 T13
T21 Num
T'
ε
ε
T + E
E
E1
E2
ε
ε
E11 E12 E13
E21 T
E'
ε
ε
1→T12→T2
S S1 E
S2 $
S' ε
![Page 414: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/414.jpg)
414
1 2 * + + 3 * 4 5 入力
$
T
T1
T2
ε
ε
T11 Num * T
T12 T13
T21 Num
T'
ε
ε
T + E
E
E1
E2
ε
ε
E11 E12 E13
E21 T
E'
ε
ε
1→T12→T2
Num 1→T11
2→T21
S S1 E
S2 $
S' ε
![Page 415: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/415.jpg)
415
1 2 * + + 3 * 4 5 入力
$
T
T1
T2
ε
ε
T11 Num * T
T12 T13
T21 Num
T'
ε
ε
T + E
E
E1
E2
ε
ε
E11 E12 E13
E21 T
E'
ε
ε
1→T12→T2
Num 1→T11
2→T21E11E21T13
S S1 E
S2 $
S' ε
![Page 416: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/416.jpg)
416
1 2 * + + 3 * 4 5 入力
$
T
T1
T2
ε
ε
T11 Num * T
T12 T13
T21 Num
T'
ε
ε
T + E
E
E1
E2
ε
ε
E11 E12 E13
E21 T
E'
ε
ε
1→T12→T2
Num 1→T11
2→T21E11E21T13E13S1
S S1 E
S2 $
S' ε
![Page 417: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/417.jpg)
417
1 2 * + + 3 * 4 5 入力
$
T
T1
T2
ε
ε
T11 Num * T
T12 T13
T21 Num
T'
ε
ε
T + E
E
E1
E2
ε
ε
E11 E12 E13
E21 T
E'
ε
ε
1→T12→T2
Num 1→T11
2→T21E11E21T13E13S1 * 1→T12
2→
S S1 E
S2 $
S' ε
![Page 418: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/418.jpg)
418
1 2 * + + 3 * 4 5 入力
$
T
T1
T2
ε
ε
T11 Num * T
T12 T13
T21 Num
T'
ε
ε
T + E
E
E1
E2
ε
ε
E11 E12 E13
E21 T
E'
ε
ε
1→T12→T2
Num 1→T11
2→T21E11E21T13E13S1 * 1→T12T1T2
2→
S S1 E
S2 $
S' ε
![Page 419: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/419.jpg)
419
1 2 * + + 3 * 4 5 入力
$
T
T1
T2
ε
ε
T11 Num * T
T12 T13
T21 Num
T'
ε
ε
T + E
E
E1
E2
ε
ε
E11 E12 E13
E21 T
E'
ε
ε
1→T12→T2
Num 1→T11
2→T21E11E21T13E13S1 * 1→T12T1T2
2→
S S1 E
S2 $
S' ε
![Page 420: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/420.jpg)
+ E
420
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
Num 1
*
T の先読みオートマトン
![Page 421: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/421.jpg)
* T
+ E
421
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
Num 1
*
T の先読みオートマトン
0:Num
![Page 422: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/422.jpg)
* T
+ E
422
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
0:Num
終端記号を読む
![Page 423: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/423.jpg)
T 1:*
+ E
423
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
0:Num
~1: 1
![Page 424: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/424.jpg)
T 1:*
+ E
424
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
0:Num
終端記号を読む
![Page 425: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/425.jpg)
2:T 1:*
+ E
425
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
0:Num
~2: *
![Page 426: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/426.jpg)
2:T 1:*
+ E
426
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
0:Num
分岐を選ぶ
![Page 427: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/427.jpg)
2:T 1:*
+ E
427
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
0:Num
Num 1
* T の先読みオートマトン
+ ?
![Page 428: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/428.jpg)
428
1 2 * + + 3 * 4 5 入力
$
T
T1
T2
ε
ε
T11 Num * T
T12 T13
T21 Num
T'
ε
ε
E
E1
E2
ε
ε
E11 T + E
E12 E13
E21 T
E'
ε
ε
+
S S1 E
S2 $
S' ε
1→T12→T2
Num 1→T11
2→T21E11E21T13E13S1 * 1→T12T1T2
2→
![Page 429: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/429.jpg)
429
1 2 * + + 3 * 4 5 入力
$
T
T1
T2
ε
ε
T11 Num * T
T12 T13
T21 Num
T'
ε
ε
E
E1
E2
ε
ε
E11 T + E
E12 E13
E21 T
E'
ε
ε
1→
2→E12
+
S S1 E
S2 $
S' ε
1→T12→T2
Num 1→T11
2→T21E11E21T13E13S1 * 1→T12T1T2
2→
![Page 430: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/430.jpg)
430
1 2 * + + 3 * 4 5 入力
$
T
T1
T2
ε
ε
T11 Num * T
T12 T13
T21 Num
T'
ε
ε
E
E1
E2
ε
ε
E11 T + E
E12 E13
E21 T
E'
ε
ε
1→
2→E12E1E2T1T2
+
S S1 E
S2 $
S' ε
1→T12→T2
Num 1→T11
2→T21E11E21T13E13S1 * 1→T12T1T2
2→
![Page 431: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/431.jpg)
431
1 2 * + + 3 * 4 5 入力
$
T
T1
T2
ε
ε
T11 Num * T
T12 T13
T21 Num
T'
ε
ε
E
E1
E2
ε
ε
E11 T + E
E12 E13
E21 T
E'
ε
ε
1→
2→E12E1E2T1T2
+
S S1 E
S2 $
S' ε
1→T12→T2
Num 1→T11
2→T21E11E21T13E13S1 * 1→T12T1T2
2→
![Page 432: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/432.jpg)
2:T 1:*
+ E
432
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
0:Num
Num 1
* T の先読みオートマトン
+ 2
![Page 433: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/433.jpg)
2:T 1:*
+ E
433
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
0:Num
Num 1
* T の先読みオートマトン
+ 2
2:Num
![Page 434: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/434.jpg)
2:T 1:*
+ E
434
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
0:Num
2:Num
~3: 2
![Page 435: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/435.jpg)
2:T 1:*
+ E
435
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
0:Num
~3: 2
![Page 436: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/436.jpg)
E 3:+
436
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
~3: 2 1
*
![Page 437: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/437.jpg)
4:E 3:+
437
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
~4: +
![Page 438: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/438.jpg)
4:E 3:+
438
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
分岐を選ぶ
![Page 439: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/439.jpg)
4:E 3:+
439
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
Num * Num 1
+ E の先読みオートマトン
+ ?
![Page 440: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/440.jpg)
440
1 2 * + + 3 * 4 5 入力
$
T
T1
T2
ε
ε
T11 Num * T
T12 T13
T21 Num
T'
ε
ε
E
E1
E2
ε
ε
E11 T + E
E12 E13
E21 T
E'
ε
ε
+
1→E1T1T22→E2T1T2
1→T11T21E11
2→T11T21E21E13S1 Num 1→T12T1T2
2→T12T1T2 *
S S1 E
S2 $
S' ε
![Page 441: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/441.jpg)
441
1 2 * + + 3 * 4 5 入力
$
T
T1
T2
ε
ε
T11 Num * T
T12 T13
T21 Num
T'
ε
ε
E
E1
E2
ε
ε
E11 T + E
E12 E13
E21 T
E'
ε
ε
1→E12
2→ +
1→E1T1T22→E2T1T2
1→T11T21E11
2→T11T21E21E13S1 Num 1→T12T1T2
2→T12T1T2 *
S S1 E
S2 $
S' ε
![Page 442: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/442.jpg)
442
1 2 * + + 3 * 4 5 入力
$
T
T1
T2
ε
ε
T11 Num * T
T12 T13
T21 Num
T'
ε
ε
E
E1
E2
ε
ε
E11 T + E
E12 E13
E21 T
E'
ε
ε
1→E12E1E2T1T2
2→ +
1→E1T1T22→E2T1T2
1→T11T21E11
2→T11T21E21E13S1 Num 1→T12T1T2
2→T12T1T2 *
S S1 E
S2 $
S' ε
![Page 443: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/443.jpg)
443
1 2 * + + 3 * 4 5 入力
$
T
T1
T2
ε
ε
T11 Num * T
T12 T13
T21 Num
T'
ε
ε
E
E1
E2
ε
ε
E11 T + E
E12 E13
E21 T
E'
ε
ε
1→E12E1E2T1T2
2→ +
1→E1T1T22→E2T1T2
1→T11T21E11
2→T11T21E21E13S1 Num 1→T12T1T2
2→T12T1T2 *
S S1 E
S2 $
S' ε
![Page 444: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/444.jpg)
4:E 3:+
444
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
Num * Num 1
+ E の先読みオートマトン
+
![Page 445: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/445.jpg)
4:E 3:+
445
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
Num * Num 1
+ E の先読みオートマトン
+
+ E 4:T
![Page 446: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/446.jpg)
4:E 3:+
446
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
+ E 4:T
Num 1
* T の先読みオートマトン
+ 2
![Page 447: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/447.jpg)
4:E 3:+
447
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
+ E 4:T
Num 1
* T の先読みオートマトン
+ 2
4:Num
![Page 448: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/448.jpg)
4:E 3:+
448
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
+ E 4:T
4:Num
~5: 3
![Page 449: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/449.jpg)
E
4:E 3:+
449
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
5:+ 4:T
~5: 3
![Page 450: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/450.jpg)
6:E
4:E 3:+
450
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
5:+ 4:T
~6: +
![Page 451: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/451.jpg)
6:E
4:E 3:+
451
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
5:+ 4:T
Num * Num 1
+ E の先読みオートマトン
+
$ ?
![Page 452: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/452.jpg)
452
1 2 * + + 3 * 4 5 入力
$
Num * Num +
+ $
T
T1
T2
ε
ε
T11 Num * T
T12 T13
T21 Num
T'
ε
ε
E
E1
E2
ε
ε
E11 T + E
E12 E13
E21 T
E'
ε
ε S S1
E S2
$ S'
ε
1→T11T21T13E11
2→T11T21T13E21E13S1
![Page 453: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/453.jpg)
453
1 2 * + + 3 * 4 5 入力
$
Num * Num +
+ 1→
2→S2
$
T
T1
T2
ε
ε
T11 Num * T
T12 T13
T21 Num
T'
ε
ε
E
E1
E2
ε
ε
E11 T + E
E12 E13
E21 T
E'
ε
ε S S1
E S2
$ S'
ε
1→T11T21T13E11
2→T11T21T13E21E13S1
![Page 454: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/454.jpg)
454
1 2 * + + 3 * 4 5 入力
$
Num * Num +
+ 1→
2→S2
$
T
T1
T2
ε
ε
T11 Num * T
T12 T13
T21 Num
T'
ε
ε
E
E1
E2
ε
ε
E11 T + E
E12 E13
E21 T
E'
ε
ε S S1
E S2
$ S'
ε
1→T11T21T13E11
2→T11T21T13E21E13S1
![Page 455: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/455.jpg)
6:E
4:E 3:+
455
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
5:+ 4:T
Num * Num 1
+ E の先読みオートマトン
+
$ 2
![Page 456: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/456.jpg)
6:E
4:E 3:+
456
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
5:+ 4:T
Num * Num 1
+ E の先読みオートマトン
+
$ 2
6:T
![Page 457: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/457.jpg)
6:E
4:E 3:+
457
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
5:+ 4:T
6:T
Num 1
* T の先読みオートマトン
+ 2
![Page 458: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/458.jpg)
6:E
4:E 3:+
458
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
5:+ 4:T
6:T
Num 1
* T の先読みオートマトン
+ 2
* T 6:Num
![Page 459: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/459.jpg)
T
6:E
4:E 3:+
459
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
5:+ 4:T
6:T
7:* 6:Num
~7: 4
![Page 460: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/460.jpg)
8:T
6:E
4:E 3:+
460
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
5:+ 4:T
6:T
7:* 6:Num
~8: *
![Page 461: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/461.jpg)
8:T
6:E
4:E 3:+
461
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
5:+ 4:T
6:T
7:* 6:Num
Num 1
*
T の先読みオートマトン
+ 2
$ ?
![Page 462: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/462.jpg)
462
1 2 * + + 3 * 4 5 入力
$
T
T1
T2
ε
ε
T11 Num * T
T12 T13
T21 Num
T'
ε
ε
E
E1
E2
ε
ε
E11 T + E
E12 E13
E21 T
E'
ε
ε
$
S S1 E
S2 $
S' ε
1→T12→T2
Num 1→T11
2→T21E11E21T13E13S1
*
+
![Page 463: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/463.jpg)
463
1 2 * + + 3 * 4 5 入力
$
T
T1
T2
ε
ε
T11 Num * T
T12 T13
T21 Num
T'
ε
ε
E
E1
E2
ε
ε
E11 T + E
E12 E13
E21 T
E'
ε
ε
$
S S1 E
S2 $
S' ε
1→T12→T2
Num 1→T11
2→T21E11E21T13E13S1
*
+ 1→
2→S2
![Page 464: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/464.jpg)
464
1 2 * + + 3 * 4 5 入力
$
T
T1
T2
ε
ε
T11 Num * T
T12 T13
T21 Num
T'
ε
ε
E
E1
E2
ε
ε
E11 T + E
E12 E13
E21 T
E'
ε
ε
$
S S1 E
S2 $
S' ε
1→T12→T2
Num 1→T11
2→T21E11E21T13E13S1
*
+ 1→
2→S2
![Page 465: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/465.jpg)
8:T
6:E
4:E 3:+
465
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
5:+ 4:T
6:T
7:* 6:Num
Num 1
*
+,$ 2
T の先読みオートマトン
![Page 466: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/466.jpg)
8:T
6:E
4:E 3:+
466
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
5:+ 4:T
6:T
7:* 6:Num
Num 1
*
+,$ 2
8:Num
T の先読みオートマトン
![Page 467: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/467.jpg)
8:T
6:E
4:E 3:+
467
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
5:+ 4:T
6:T
7:* 6:Num
8:Num
~9: 5
![Page 468: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/468.jpg)
8:T
6:E
4:E 3:+
468
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
5:+ 4:T
6:T
7:* 6:Num
~9: 5
![Page 469: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/469.jpg)
6:E
4:E 3:+
469
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
5:+ 4:T
6:T
~9: 5 4
*
![Page 470: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/470.jpg)
6:E
4:E 3:+
470
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
5:+ 4:T
~9: 5 4
*
![Page 471: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/471.jpg)
4:E 3:+
471
1 2 * + + 3 * 4 5 入力
$
0:E
0:T
~9:
5 4
*
+
3
![Page 472: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/472.jpg)
472
1 2 * + + 3 * 4 5 入力
$
0:E
~9: 2 1
*
5 4
*
+
3
+
![Page 473: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/473.jpg)
Adaptive LL(*) parsing [Parr 2014]
• ANTLR v4 のアルゴリズム Ø v2 は LL(k), v3 は LL(*)
• 大抵の場合に O(n) で動作 Ø GLR や GLL よりも高速
• 能力 Ø 計算量 : O(n4) Ø 言語 : ALL(*) language Ø 文法 : Predicated grammar
473
![Page 474: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/474.jpg)
年表 474
1961: Shunting-yard
1973: Pratt
1965: LR
1985: GLR
1968: Earley
1965-1969: CYK
1975: Valiant 1979: LL(k)
1969: SLL(k)
2002: Packrat
2008: Packrat+左再帰
2010: GLL
2014: Adaptive LL(*)
2011: LL(*)
1971: SLR(k)
1969: LALR(k)
1979: Precedence climbing
1991: メモ化再帰 Earley
![Page 475: ビジュアル構文解析 - ppl.jssst.or.jpppl.jssst.or.jp/ppl2016/slides/visual_parsing.pdf · 演算子順位構文解析 Ø Shunting-yard algorithm 中置記法を後置記法に直す](https://reader031.vdocuments.mx/reader031/viewer/2022020217/5e03be4cbabc0a24de238d78/html5/thumbnails/475.jpg)
• 演算子順位構文解析 Ø p.007 Shunting-yard algorithm Ø p.034 Pratt parsing
• 上向き構文解析 Ø p.069 LR parsing Ø p.103 GLR parsing Ø p.138 Earley parsing Ø p.180 CYK algorithm Ø p.206 Valiant parsing
• 下向き構文解析 Ø p.232 LL(k) parsing Ø p.251 Packrat parsing Ø p.294 Packrat parsing with left recursion Ø p.345 GLL parsing Ø p.391 Adaptive LL(*) parsing
475