Slide 1

Slide 1 text

「ナントカLR」を整理する Junichi Kobayashi (@junk0612) ESM, Inc. LR Parser Night w/ Asakusa.rb ANDPAD Inc. 2024/06/25(Tue.)

Slide 2

Slide 2 text

Junichi Kobayashi ● X / GitHub: @junk0612 ● 永和システムマネジメント ○ Rails エンジニア ○ 構文解析器研究部員 ● 趣味 ○ パーサー ○ 音楽ゲーム ○ ボードゲーム ○ 俳句

Slide 3

Slide 3 text

We Are Hiring!! 詳しくは社員まで ☺

Slide 4

Slide 4 text

大事なことは最初に

Slide 5

Slide 5 text

「From LALR to IELR」 相関図 Canonical LR 定義に基づく実装 処理能力が高い LALR 現実的なメモリ使用量 最も実用的 IELR 最小 LR の一種 Lrama に実装中 ときどきあるミスが気になる 効率の悪さを直してほしい いいとこ取りを狙う Parser Scannerless Parser 依存 不満 PSLR Lexer 統合のための武器 Lrama が目指すもの

Slide 6

Slide 6 text

IELR 最小 LR の一種 Lrama に実装中 効率の悪さを直してほしい いいとこ取りを狙う Scannerless Parser 依存 不満 PSLR Lexer 統合のための武器 Lrama が目指すもの Canonical LR 定義に基づく実装 処理能力が高い LALR 現実的なメモリ使用量 最も実用的 「From LALR to IELR」 相関図 ときどきあるミスが気になる Parser Mysterious Conflict

Slide 7

Slide 7 text

「From LALR to IELR」 相関図 IELR 最小 LR の一種 Lrama に実装中 ときどきあるミスが気になる いいとこ取りを狙う Scannerless Parser 依存 不満 PSLR Lexer 統合のための武器 Lrama が目指すもの Canonical LR 定義に基づく実装 処理能力が高い LALR 現実的なメモリ使用量 最も実用的 効率の悪さを直してほしい Parser 状態数 (≒メモリ使用量) 5~10倍 (論文より)

Slide 8

Slide 8 text

「From LALR to IELR」 相関図 ときどきあるミスが気になる 効率の悪さを直してほしい Scannerless Parser 依存 不満 PSLR Lexer 統合のための武器 Lrama が目指すもの Canonical LR 定義に基づく実装 処理能力が高い LALR 現実的なメモリ使用量 最も実用的 IELR 最小 LR の一種 Lrama に実装中 いいとこ取りを狙う Parser どんな入力でも 同じ動作 状態数は ほぼ同じ

Slide 9

Slide 9 text

「From LALR to IELR」 相関図 Canonical LR 定義に基づく実装 処理能力が高い LALR 現実的なメモリ使用量 最も実用的 IELR 最小 LR の一種 Lrama に実装中 ときどきあるミスが気になる 効率の悪さを直してほしい いいとこ取りを狙う Parser Scannerless Parser 依存 不満 PSLR Lexer 統合のための武器 Lrama が目指すもの

Slide 10

Slide 10 text

ときどきあるミスが気になる 効率の悪さを直してほしい いいとこ取りを狙う Scannerless Parser 依存 不満 PSLR Lexer 統合のための武器 Lrama が目指すもの 「From LALR to IELR」 相関図 Canonical LR 定義に基づく実装 処理能力が高い LALR 現実的なメモリ使用量 最も実用的 IELR 最小 LR の一種 Lrama に実装中 Parser

Slide 11

Slide 11 text

Parser State 0 State 1 State 2 State 3 NUM + exp State 4 State 5 State 6 * ( exp NUM - … Token Stream Source Code Lexer Grammar File Parser Generator 8, 'B' 4, '-' 1, 'E' 0 LR Parser のイメージモデル

Slide 12

Slide 12 text

Parser State 0 State 1 State 2 State 3 NUM + exp State 4 State 5 State 6 * ( exp NUM - … Token Stream Source Code Lexer Grammar File Parser Generator 8, 'B' 4, '-' 1, 'E' 0 LR Parser のイメージモデル オートマトンを どう作るかの違い

Slide 13

Slide 13 text

Canonical LR のオートマトン

Slide 14

Slide 14 text

Canonical LR のオートマトン

Slide 15

Slide 15 text

LALR のオートマトン

Slide 16

Slide 16 text

LALR のオートマトン

Slide 17

Slide 17 text

IELR のオートマトン

Slide 18

Slide 18 text

「From LALR to IELR」 相関図 Canonical LR 定義に基づく実装 処理能力が高い LALR 現実的なメモリ使用量 最も実用的 IELR 最小 LR の一種 Lrama に実装中 ときどきあるミスが気になる 効率の悪さを直してほしい いいとこ取りを狙う Parser Scannerless Parser 依存 不満 PSLR Lexer 統合のための武器 Lrama が目指すもの

Slide 19

Slide 19 text

付録: Mysterious Conflict

Slide 20

Slide 20 text

Mysterious New Conflict

Slide 21

Slide 21 text

Mysterious Invasive Conflict

Slide 22

Slide 22 text

Mysterious Mutated Conflict