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
180
“A ::= aAa / a” in PEG
さっき考えてたことのメモ
Masaki Hara
June 09, 2013
Tweet
Share
More Decks by Masaki Hara
See All by Masaki Hara
状態設計から「なんとなく」を無くそう
qnighy
84
26k
日付時刻A to Z
qnighy
1
490
Hands-on Native ESM @ JSConf JP 2022
qnighy
0
5.4k
computed_modelの紹介 / Introducing computed_model (2)
qnighy
0
550
computed_modelの紹介 / Introducing computed_model
qnighy
0
330
Rust: imperative language 2.0
qnighy
10
2.3k
Making an opinionated Web framework
qnighy
2
4.3k
BigQueryでprotobufをパースした話 / parsing protobuf in BigQuery
qnighy
1
2.2k
セミコロン完全マスター
qnighy
6
3.3k
Other Decks in Programming
See All in Programming
スクラムガイドのスプリントレトロスペクティブを改めて読みかえしてみた / Re-reading the Sprint Retrospective Section in the Scrum Guide
mackey0225
3
480
R言語の環境構築と基礎 Tokyo.R 112
bob3bob3
0
280
冗長なエラーログを削減し、スタックトレースを手に入れる / Reducing Verbose Error Logs and Obtaining Stack Traces
upamune
0
1k
効率化に挑戦してみたらモバイル開発が少し快適になった話
ryunakayama
0
140
Site Reliability Engineering for GMO
pyama86
8
1.1k
雑に思考を整理する技術と効能
konifar
63
30k
Let's learn code review
riofujimon
2
570
Goのエラースタックトレースの歴史と今後
sonatard
10
1.8k
Ruby Pattern Matching
bkuhlmann
0
930
Going beyond Apache Parquet's default settings
xhochy
0
130
CA.swift19 恋するAIアプリ開発の裏側
oskmr
0
380
Next.js App Router
quramy
12
1.8k
Featured
See All Featured
Atom: Resistance is Futile
akmur
260
25k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
20
1.6k
Six Lessons from altMBA
skipperchong
22
3k
Optimising Largest Contentful Paint
csswizardry
12
2.4k
What’s in a name? Adding method to the madness
productmarketing
PRO
17
2.7k
Bootstrapping a Software Product
garrettdimon
PRO
302
110k
What's in a price? How to price your products and services
michaelherold
238
11k
Scaling GitHub
holman
457
140k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
11
1k
Building a Modern Day E-commerce SEO Strategy
aleyda
21
6.4k
Building Better People: How to give real-time feedback that sticks.
wjessup
356
18k
How to name files
jennybc
65
93k
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にマッチすることがわかった