Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ESM Super LT/Comparing LL and LR parse algorithm

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers. →

ESM Super LT/Comparing LL and LR parse algorithm

Junichi Kobayashi

November 08, 2023

Transcript

22 slides
  1. LL 法と LR 法の違いは? 調べてみた! ESM アジャイル事業部 構文解析器研究部員 小林純一 (@junk0612)

    RubyWorld Conference 2023 島根県立産業交流会館「くにびきメッセ」 2023/11/09(Thu.)
  2. • 小林純一 • X / GitHub: @junk0612 • 株式会社永和システムマネジメント アジャイル事業部

    ◦ RubyxAgile グループ ◦ 構文解析器研究部員 • Lrama コントリビューター ◦ Named References の実装 ◦ 内部パーサーの Racc 化 など 自己紹介
  3. LL法とLR法 LL法 • トップダウン方式 • 左端導出 • 手書きに適している • 先読みによって構文を推測する

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

    • Prism が採用している LR法 • ボトムアップ方式 • 右端導出 • 手書きには適さない • 決定論的に構文木を構築する • Lrama が生成するパーサーが 採用している
  5. 例: メソッド定義 method_definition def method_name ( args ) method_body end

    method_definition def method_name ( args ) = method_body
  6. method_definition def method_name 分岐 • → 引数 • → end-less

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

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

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

    メソッド • → メソッド本体 = method_body = LL法の場合
  10. LL法とLR法 LL法 • トップダウン方式 • 左端導出 • 手書きに適している • 先読みによって構文を推測する

    • Prism が採用している LR法 • ボトムアップ方式 • 右端導出 • 手書きには適さない • 決定論的に構文木を構築する • Lrama が生成するパーサーが 採用している

More Decks by Junichi Kobayashi

Other Decks in Programming