Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ESM Super LT/Comparing LL and LR parse algorithm
Search
Junichi Kobayashi
November 08, 2023
Programming
1
61
ESM Super LT/Comparing LL and LR parse algorithm
Junichi Kobayashi
November 08, 2023
Tweet
Share
More Decks by Junichi Kobayashi
See All by Junichi Kobayashi
RubyConf Taiwan / Understanding Parser Generators surrounding Ruby with Contributing Lrama
junk0612
1
3.1k
LL法とLR法の違いは?調べてみた!-完全版-/Comparing LL and LR parse algorithm -EX Edition-
junk0612
0
160
Lrama へのコントリビューションを通して学ぶ Ruby のパーサジェネレータ事情
junk0612
4
2.9k
ソフトウェア開発とコミュニケーション / Communication in Software Development
junk0612
0
1.1k
アジャイルという「マインドセット」 / Mindset named Agile
junk0612
0
830
Rails × パターン / Rails meets Patterns
junk0612
3
2.4k
「アジャイル開発」でハッピーになろう
junk0612
0
130
ESMに入ってよかったと思う5つの理由 / 5 Good Reasons To Join ESM
junk0612
0
250
Railsを仕事にする会社で新卒が1年間学んだこと
junk0612
6
2.1k
Other Decks in Programming
See All in Programming
Java 22 Overview
kishida
1
190
Elm Form Validation
bkuhlmann
0
510
効率化に挑戦してみたらモバイル開発が少し快適になった話
ryunakayama
0
130
2 週間で Twitter Bot を作ってみた
contour_gara
0
630
CA.swift19 恋するAIアプリ開発の裏側
oskmr
0
370
コーンフレークから始める モデリング会話入門
ogurotakayuki
0
380
Micro Frontends for Java Microservices - Devnexus 2024
mraible
PRO
0
500
サイコロで理解する統計的仮説検定の考え方
tatamiya
4
970
Blue/Greenデプロイの導入による 運用フローの改善
kudoas
1
390
禅の心を手に入れよ
eltociear
1
170
検証も兼ねて個人開発でHonoとかと向き合った話
hanetsuki
1
1.2k
MetricKitで予期せぬ終了を検知する話 / Detect unexpected termination with MetricKit
nekowen
1
190
Featured
See All Featured
Practical Orchestrator
shlominoach
182
9.7k
The Cost Of JavaScript in 2023
addyosmani
16
3.9k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
60
14k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
18
6.9k
YesSQL, Process and Tooling at Scale
rocio
164
13k
The Straight Up "How To Draw Better" Workshop
denniskardys
227
130k
Rails Girls Zürich Keynote
gr2m
91
13k
Fontdeck: Realign not Redesign
paulrobertlloyd
76
4.9k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
659
120k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
34
8.9k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
17
1.4k
Fireside Chat
paigeccino
21
2.6k
Transcript
LL 法と LR 法の違いは? 調べてみた! ESM アジャイル事業部 構文解析器研究部員 小林純一 (@junk0612)
RubyWorld Conference 2023 島根県立産業交流会館「くにびきメッセ」 2023/11/09(Thu.)
• 小林純一 • X / GitHub: @junk0612 • 株式会社永和システムマネジメント アジャイル事業部
◦ RubyxAgile グループ ◦ 構文解析器研究部員 • Lrama コントリビューター ◦ Named References の実装 ◦ 内部パーサーの Racc 化 など 自己紹介
世はまさに 大パーサー時代
LL 法 と LR 法
LL法とLR法 LL法 • トップダウン方式 • 左端導出 • 手書きに適している • 先読みによって構文を推測する
• Prism が採用している LR法 • ボトムアップ方式 • 右端導出 • 手書きには適さない • 決定論的に構文木を構築する • Lrama が生成するパーサーが 採用している
LL法とLR法 LL法 • トップダウン方式 • 左端導出 • 手書きに適している • 先読みによって構文を推測する
• Prism が採用している LR法 • ボトムアップ方式 • 右端導出 • 手書きには適さない • 決定論的に構文木を構築する • Lrama が生成するパーサーが 採用している
例: メソッド定義 method_definition def method_name ( args ) method_body end
method_definition def method_name ( args ) = method_body
method_definition LL法の場合
method_definition def method_name LL法の場合
method_definition def method_name 分岐 • → 引数 • → end-less
メソッド • → メソッド本体 ( = method_body LL法の場合
method_definition def method_name 分岐 • → 引数 • → end-less
メソッド • → メソッド本体 ( = method_body ( LL法の場合
method_definition def method_name ( args ) LL法の場合
method_definition def method_name ( args ) 分岐 • → end-less
メソッド • → メソッド本体 = method_body LL法の場合
method_definition def method_name ( args ) 分岐 • → end-less
メソッド • → メソッド本体 = method_body = LL法の場合
LL法の場合 method_definition def method_name ( args ) = method_body
LR法の場合 def
LR法の場合 def method_name
LR法の場合 def method_name ( args )
LR法の場合 def method_name ( args ) = method_body
LR法の場合 method_definition def method_name ( args ) = method_body
LL法とLR法 LL法 • トップダウン方式 • 左端導出 • 手書きに適している • 先読みによって構文を推測する
• Prism が採用している LR法 • ボトムアップ方式 • 右端導出 • 手書きには適さない • 決定論的に構文木を構築する • Lrama が生成するパーサーが 採用している
Let's parse everything your favorite algorithm.