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
“A ::= aAa / a” in PEG
Search
Masaki Hara
June 09, 2013
Programming
0
220
“A ::= aAa / a” in PEG
さっき考えてたことのメモ
Masaki Hara
June 09, 2013
Tweet
Share
More Decks by Masaki Hara
See All by Masaki Hara
バックエンドのためのアプリ内課金入門 (サブスク編)
qnighy
9
2.2k
Dockerfileの考え方
qnighy
49
19k
Arm移行タイムアタック
qnighy
1
620
Quine, Polyglot, 良いコード
qnighy
5
820
Prolog入門
qnighy
5
2.2k
Rubyのobject_id
qnighy
7
1.7k
Getting along with YAML comments with Psych
qnighy
2
2.7k
状態設計から「なんとなく」を無くそう
qnighy
86
29k
日付時刻A to Z
qnighy
2
850
Other Decks in Programming
See All in Programming
3年ぶりにコードを書いた元CTOが Claude Codeと30分でMVPを作った話
maikokojima
0
700
モテるデスク環境
mozumasu
3
1.4k
Inside of Swift Export
giginet
PRO
1
180
NIKKEI Tech Talk#38
cipepser
0
320
AI Agent 時代的開發者生存指南
eddie
4
2.2k
TFLintカスタムプラグインで始める Terraformコード品質管理
bells17
2
480
Pythonに漸進的に型をつける
nealle
1
140
コードとあなたと私の距離 / The Distance Between Code, You, and I
hiro_y
0
210
Webサーバーサイド言語としてのRustについて
kouyuume
1
5k
あなたとKaigi on Rails / Kaigi on Rails + You
shimoju
0
220
CSC305 Lecture 12
javiergs
PRO
0
240
Vue 3.6 時代のリアクティビティ最前線 〜Vapor/alien-signals の実践とパフォーマンス最適化〜
hiranuma
2
250
Featured
See All Featured
Writing Fast Ruby
sferik
630
62k
A designer walks into a library…
pauljervisheath
209
24k
Balancing Empowerment & Direction
lara
5
700
4 Signs Your Business is Dying
shpigford
186
22k
Facilitating Awesome Meetings
lara
57
6.6k
Done Done
chrislema
185
16k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
A Tale of Four Properties
chriscoyier
161
23k
Faster Mobile Websites
deanohume
310
31k
Typedesign – Prime Four
hannesfritz
42
2.8k
Code Reviewing Like a Champion
maltzj
526
40k
Mobile First: as difficult as doing things right
swwweet
225
10k
Transcript
“A ::= aAa / a” in PEG Masaki Hara さっき考えてたことのメモ
PEG • 手前から順番に試す • 文字列の一部分と一致したらそこで停止
PEG • 手前から順番に試す • 文字列の一部分と一致したらそこで停止 • 病的な例が知られている
PEGの病的な例 • “a := aAa / a” というルールを考える
PEGの病的な例 • “a := aAa / a” というルールを考える – 直感的にはaが奇数個並んだ文字列にマッチ
PEGの病的な例 • “a := aAa / a” というルールを考える – 直感的にはaが奇数個並んだ文字列にマッチ
– 実際はaが(2^n-1)個並んだ文字列にマッチ
PEGの病的な例の解析 • ここでは、文字列の後ろ側から順番に解析し てみる – 実際は手前から再帰的に試す
a a a a a a a A ::= aAa
| a
a a a a a a a A ::= aAa
| a × aAaを試そうと するが失敗
a a a a a a a A ::= aAa
| a ◦ aを試す →成功
a a a a a a a A ::= aAa
| a
a a a a a a a A ::= aAa
| a
a a a a a a a A ::= aAa
| a ×
a a a a a a a A ::= aAa
| a ◦ aにマッチ
a a a a a a a A ::= aAa
| a
a a a a a a a A ::= aAa
| a
a a a a a a a A ::= aAa
| a
a a a a a a a A ::= aAa
| a ◦ aAaにマッチ
a a a a a a a A ::= aAa
| a aAaにマッチしてしまった のでaにはマッチしない
a a a a a a a A ::= aAa
| a A=aaaと決まっているので aaaaaにマッチしようとする →失敗
a a a a a a a A ::= aAa
| a ×
a a a a a a a A ::= aAa
| a ◦
a a a a a a a A ::= aAa
| a
a a a a a a a A ::= aAa
| a
a a a a a a a A ::= aAa
| a
a a a a a a a A ::= aAa
| a ◦
a a a a a a a A ::= aAa
| a aaaにマッチ →全体にマッチしない (∴5文字は×)
a a a a a a a A ::= aAa
| a
a a a a a a a A ::= aAa
| a 7文字は◦
a a a a a a a A ::= aAa
| a 0 1 2 3 4 5 6 7
位置 マッチ先 1 0 2 1 3 0 4 3
5 2 6 1 7 0
位置 マッチ先 1 0 2 1 3 0 4 3
5 2 6 1 7 0 aAaにマッチする時 →数字が1減る
位置 マッチ先 1 0 2 1 3 0 4 3
5 2 6 1 7 0 aにマッチする時 →直後を参照
結論 • (2^n-1)個のaにマッチすることがわかった