Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
“A ::= aAa / a” in PEG Masaki Hara さっき考えてたことのメモ
Slide 2
Slide 2 text
PEG • 手前から順番に試す • 文字列の一部分と一致したらそこで停止
Slide 3
Slide 3 text
PEG • 手前から順番に試す • 文字列の一部分と一致したらそこで停止 • 病的な例が知られている
Slide 4
Slide 4 text
PEGの病的な例 • “a := aAa / a” というルールを考える
Slide 5
Slide 5 text
PEGの病的な例 • “a := aAa / a” というルールを考える – 直感的にはaが奇数個並んだ文字列にマッチ
Slide 6
Slide 6 text
PEGの病的な例 • “a := aAa / a” というルールを考える – 直感的にはaが奇数個並んだ文字列にマッチ – 実際はaが(2^n-1)個並んだ文字列にマッチ
Slide 7
Slide 7 text
PEGの病的な例の解析 • ここでは、文字列の後ろ側から順番に解析し てみる – 実際は手前から再帰的に試す
Slide 8
Slide 8 text
a a a a a a a A ::= aAa | a
Slide 9
Slide 9 text
a a a a a a a A ::= aAa | a × aAaを試そうと するが失敗
Slide 10
Slide 10 text
a a a a a a a A ::= aAa | a ○ aを試す →成功
Slide 11
Slide 11 text
a a a a a a a A ::= aAa | a
Slide 12
Slide 12 text
a a a a a a a A ::= aAa | a
Slide 13
Slide 13 text
a a a a a a a A ::= aAa | a ×
Slide 14
Slide 14 text
a a a a a a a A ::= aAa | a ○ aにマッチ
Slide 15
Slide 15 text
a a a a a a a A ::= aAa | a
Slide 16
Slide 16 text
a a a a a a a A ::= aAa | a
Slide 17
Slide 17 text
a a a a a a a A ::= aAa | a
Slide 18
Slide 18 text
a a a a a a a A ::= aAa | a ○ aAaにマッチ
Slide 19
Slide 19 text
a a a a a a a A ::= aAa | a aAaにマッチしてしまった のでaにはマッチしない
Slide 20
Slide 20 text
a a a a a a a A ::= aAa | a A=aaaと決まっているので aaaaaにマッチしようとする →失敗
Slide 21
Slide 21 text
a a a a a a a A ::= aAa | a ×
Slide 22
Slide 22 text
a a a a a a a A ::= aAa | a ○
Slide 23
Slide 23 text
a a a a a a a A ::= aAa | a
Slide 24
Slide 24 text
a a a a a a a A ::= aAa | a
Slide 25
Slide 25 text
a a a a a a a A ::= aAa | a
Slide 26
Slide 26 text
a a a a a a a A ::= aAa | a ○
Slide 27
Slide 27 text
a a a a a a a A ::= aAa | a aaaにマッチ →全体にマッチしない (∴5文字は×)
Slide 28
Slide 28 text
a a a a a a a A ::= aAa | a
Slide 29
Slide 29 text
a a a a a a a A ::= aAa | a 7文字は○
Slide 30
Slide 30 text
a a a a a a a A ::= aAa | a 0 1 2 3 4 5 6 7
Slide 31
Slide 31 text
位置 マッチ先 1 0 2 1 3 0 4 3 5 2 6 1 7 0
Slide 32
Slide 32 text
位置 マッチ先 1 0 2 1 3 0 4 3 5 2 6 1 7 0 aAaにマッチする時 →数字が1減る
Slide 33
Slide 33 text
位置 マッチ先 1 0 2 1 3 0 4 3 5 2 6 1 7 0 aにマッチする時 →直後を参照
Slide 34
Slide 34 text
結論 • (2^n-1)個のaにマッチすることがわかった