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

ESM Super LT/Comparing LL and LR parse algorithm

ESM Super LT/Comparing LL and LR parse algorithm

Junichi Kobayashi

November 08, 2023
Tweet

More Decks by Junichi Kobayashi

Other Decks in Programming

Transcript

  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 が生成するパーサーが 採用している