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
81
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
「ナントカLR」を整理する / Clarifying LR Algorithms
junk0612
1
220
From LALR to IELR: A Lrama's Next Step
junk0612
2
3.2k
RubyConf Taiwan / Understanding Parser Generators surrounding Ruby with Contributing Lrama
junk0612
1
4k
LL法とLR法の違いは?調べてみた!-完全版-/Comparing LL and LR parse algorithm -EX Edition-
junk0612
0
360
Lrama へのコントリビューションを通して学ぶ Ruby のパーサジェネレータ事情
junk0612
4
4.1k
ソフトウェア開発とコミュニケーション / Communication in Software Development
junk0612
0
1.2k
アジャイルという「マインドセット」 / Mindset named Agile
junk0612
0
850
Rails × パターン / Rails meets Patterns
junk0612
3
2.4k
「アジャイル開発」でハッピーになろう
junk0612
0
140
Other Decks in Programming
See All in Programming
Async Await: Mastering Python's Time-Bending Tricks - EuroPython2024
yanbo
1
290
TiDB Serverless ~理想のServerless DBを考える~
soso_15315
1
160
Advanced App Shrinking Techniques
cbeyls
2
150
英語
s_shimotori
1
220
20240706_CDKConf
takuyay0ne
0
1.2k
GraphQL はいいぞ! ~Laravel で学ぶ GraphQL 入門~
azuki
1
160
君たちはどうコードをレビューする (される) か / 大吉祥寺.pm
utgwkk
15
8.5k
スクラムマスターって孤独じゃないですか?
yoshitaroyoyo
1
140
Architectures with Lightweight Stores: New Rules and Options
manfredsteyer
PRO
0
100
AWSでゲームサーバーを運用! Amazon GameLiftのお話
iriikeita
0
200
Clean Architecture by TypeScript & NestJS
ryounasso
0
150
ドメイン駆動設計の実践
masuda220
PRO
19
5.2k
Featured
See All Featured
BBQ
matthewcrist
82
9k
Web development in the modern age
philhawksworth
203
10k
VelocityConf: Rendering Performance Case Studies
addyosmani
321
23k
RailsConf 2023
tenderlove
16
720
Building a Modern Day E-commerce SEO Strategy
aleyda
25
6.7k
Optimising Largest Contentful Paint
csswizardry
18
2.6k
Facilitating Awesome Meetings
lara
46
5.8k
Automating Front-end Workflow
addyosmani
1362
200k
How GitHub (no longer) Works
holman
305
140k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
248
20k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
662
120k
Code Review Best Practice
trishagee
58
16k
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.