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
230
0
Share
“A ::= aAa / a” in PEG
さっき考えてたことのメモ
Masaki Hara
June 09, 2013
More Decks by Masaki Hara
See All by Masaki Hara
文字コードの話
qnighy
47
19k
バックエンドのためのアプリ内課金入門 (サブスク編)
qnighy
9
2.5k
Dockerfileの考え方
qnighy
50
19k
Arm移行タイムアタック
qnighy
1
720
Quine, Polyglot, 良いコード
qnighy
5
890
Prolog入門
qnighy
5
2.8k
Rubyのobject_id
qnighy
7
1.8k
Getting along with YAML comments with Psych
qnighy
2
3k
状態設計から「なんとなく」を無くそう
qnighy
90
30k
Other Decks in Programming
See All in Programming
脅威をエンジニアリングの糧にして――現場編 / Turning Threats into Engineering Fuel — Field Edition
nrslib
0
210
ビジネスモデルから紐解く、AI+型駆動開発
hirokiomote
2
3.7k
Composerを使ったサプライチェーン攻撃の様子を眺めてみる #phpstudy
o0h
PRO
2
180
Technical Debt: Understanding it Rightly, Engaging it Rightly #LaravelLiveJP
shogogg
0
160
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
2.9k
Claspは野良GASの夢をみるか
takter00
0
130
Spec-Driven Development with AI-Agents: From High-Level Requirements to Working Software
antonarhipov
2
380
AIチームを指揮するOSS「TAKT」活用術 / How to Use “TAKT,” an OSS Tool for Orchestrating AI Teams
nrslib
6
730
[BalkanRuby 2026] Drop your app/services!
palkan
3
710
密結合なバックエンドから TypeScript のコードを生成する
kemuridama
1
380
Agentic UI beyond Chats Architecture Patterns & Open Standards @ngMunich 05/2026
manfredsteyer
PRO
0
170
権限チェックの一貫性を型で守る TypeScript による多層防御
mnch
4
920
Featured
See All Featured
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
What does AI have to do with Human Rights?
axbom
PRO
1
2.2k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
920
KATA
mclloyd
PRO
35
15k
Building Applications with DynamoDB
mza
96
7.1k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.4k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
460
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.8k
Facilitating Awesome Meetings
lara
57
6.9k
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にマッチすることがわかった