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
210
“A ::= aAa / a” in PEG
さっき考えてたことのメモ
Masaki Hara
June 09, 2013
Tweet
Share
More Decks by Masaki Hara
See All by Masaki Hara
バックエンドのためのアプリ内課金入門 (サブスク編)
qnighy
8
2k
Dockerfileの考え方
qnighy
47
18k
Arm移行タイムアタック
qnighy
1
570
Quine, Polyglot, 良いコード
qnighy
5
780
Prolog入門
qnighy
5
1.8k
Rubyのobject_id
qnighy
7
1.7k
Getting along with YAML comments with Psych
qnighy
2
2.6k
状態設計から「なんとなく」を無くそう
qnighy
86
29k
日付時刻A to Z
qnighy
1
700
Other Decks in Programming
See All in Programming
AIエージェントによるテストフレームワーク Arbigent
takahirom
0
360
Passkeys for Java Developers
ynojima
2
830
GoのWebAssembly活用パターン紹介
syumai
3
9.8k
PT AI без купюр
v0lka
0
230
Bytecode Manipulation 으로 생산성 높이기
bigstark
1
220
無関心の谷
kanayannet
0
160
赤裸々に公開。 TSKaigiのオフシーズン
takezoux2
0
110
XSLTで作るBrainfuck処理系
makki_d
0
180
データベースコネクションプール(DBCP)の変遷と理解
fujikawa8
1
240
「ElixirでIoT!!」のこれまでとこれから
takasehideki
0
340
TypeScript LSP の今までとこれから
quramy
1
490
GoのGenericsによるslice操作との付き合い方
syumai
2
410
Featured
See All Featured
A better future with KSS
kneath
239
17k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
Faster Mobile Websites
deanohume
307
31k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Music & Morning Musume
bryan
46
6.6k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
47
2.8k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
Automating Front-end Workflow
addyosmani
1370
200k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Raft: Consensus for Rubyists
vanstee
139
7k
Product Roadmaps are Hard
iamctodd
PRO
53
11k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
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にマッチすることがわかった
Otomatik - 104.22.39.239
CloudFlare DNS
Türk Telekom DNS
Google DNS
Open DNS
OSZAR »