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.)

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  4. LL 法

    LR 法

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  8. method_definition
    LL法の場合

    View full-size slide

  9. method_definition
    def
    method_name
    LL法の場合

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  12. method_definition
    def
    method_name
    (
    args
    )
    LL法の場合

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  16. LR法の場合
    def

    View full-size slide

  17. LR法の場合
    def
    method_name

    View full-size slide

  18. LR法の場合
    def
    method_name
    (
    args
    )

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  22. Let's parse everything
    your favorite algorithm.

    View full-size slide