Slide 1

Slide 1 text

LL 法と LR 法の違いは? 調べてみた! ESM アジャイル事業部 構文解析器研究部員 小林純一 (@junk0612) RubyWorld Conference 2023 島根県立産業交流会館「くにびきメッセ」 2023/11/09(Thu.)

Slide 2

Slide 2 text

● 小林純一 ● X / GitHub: @junk0612 ● 株式会社永和システムマネジメント アジャイル事業部 ○ RubyxAgile グループ ○ 構文解析器研究部員 ● Lrama コントリビューター ○ Named References の実装 ○ 内部パーサーの Racc 化 など 自己紹介

Slide 3

Slide 3 text

世はまさに 大パーサー時代

Slide 4

Slide 4 text

LL 法 と LR 法

Slide 5

Slide 5 text

LL法とLR法 LL法 ● トップダウン方式 ● 左端導出 ● 手書きに適している ● 先読みによって構文を推測する ● Prism が採用している LR法 ● ボトムアップ方式 ● 右端導出 ● 手書きには適さない ● 決定論的に構文木を構築する ● Lrama が生成するパーサーが 採用している

Slide 6

Slide 6 text

LL法とLR法 LL法 ● トップダウン方式 ● 左端導出 ● 手書きに適している ● 先読みによって構文を推測する ● Prism が採用している LR法 ● ボトムアップ方式 ● 右端導出 ● 手書きには適さない ● 決定論的に構文木を構築する ● Lrama が生成するパーサーが 採用している

Slide 7

Slide 7 text

例: メソッド定義 method_definition def method_name ( args ) method_body end method_definition def method_name ( args ) = method_body

Slide 8

Slide 8 text

method_definition LL法の場合

Slide 9

Slide 9 text

method_definition def method_name LL法の場合

Slide 10

Slide 10 text

method_definition def method_name 分岐 ● → 引数 ● → end-less メソッド ● → メソッド本体 ( = method_body LL法の場合

Slide 11

Slide 11 text

method_definition def method_name 分岐 ● → 引数 ● → end-less メソッド ● → メソッド本体 ( = method_body ( LL法の場合

Slide 12

Slide 12 text

method_definition def method_name ( args ) LL法の場合

Slide 13

Slide 13 text

method_definition def method_name ( args ) 分岐 ● → end-less メソッド ● → メソッド本体 = method_body LL法の場合

Slide 14

Slide 14 text

method_definition def method_name ( args ) 分岐 ● → end-less メソッド ● → メソッド本体 = method_body = LL法の場合

Slide 15

Slide 15 text

LL法の場合 method_definition def method_name ( args ) = method_body

Slide 16

Slide 16 text

LR法の場合 def

Slide 17

Slide 17 text

LR法の場合 def method_name

Slide 18

Slide 18 text

LR法の場合 def method_name ( args )

Slide 19

Slide 19 text

LR法の場合 def method_name ( args ) = method_body

Slide 20

Slide 20 text

LR法の場合 method_definition def method_name ( args ) = method_body

Slide 21

Slide 21 text

LL法とLR法 LL法 ● トップダウン方式 ● 左端導出 ● 手書きに適している ● 先読みによって構文を推測する ● Prism が採用している LR法 ● ボトムアップ方式 ● 右端導出 ● 手書きには適さない ● 決定論的に構文木を構築する ● Lrama が生成するパーサーが 採用している

Slide 22

Slide 22 text

Let's parse everything your favorite algorithm.