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にマッチすることがわかった