Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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.