Upload
Download free for 30 days
Login
Submit Search
PEGの回文っぽいExpression
0 likes
2,532 views
Sosuke MORIGUCHI
PEGで書いた、傍目には回文のように見える式が、なぜ回文を受理しないのかの説明。PEGの入門に・・・どうでしょうかね?
Education
Read more
1 of 47
Download now
Download to read offline
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
More Related Content
PDF
Plantilla ensamble-5
Karla Estrada
PDF
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
PDF
Summerseminar2019
Sosuke MORIGUCHI
PDF
Linear logic (and Linear Lisp)
Sosuke MORIGUCHI
PDF
fibsを読む
Sosuke MORIGUCHI
PDF
ProofSummit2014 : VSTでCの検証
Sosuke MORIGUCHI
PDF
Nagoya Matsuri 2013 ぐだぐだAgda
Sosuke MORIGUCHI
PDF
ProofSummit2013 べらべらAbella
Sosuke MORIGUCHI
Plantilla ensamble-5
Karla Estrada
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
Summerseminar2019
Sosuke MORIGUCHI
Linear logic (and Linear Lisp)
Sosuke MORIGUCHI
fibsを読む
Sosuke MORIGUCHI
ProofSummit2014 : VSTでCの検証
Sosuke MORIGUCHI
Nagoya Matsuri 2013 ぐだぐだAgda
Sosuke MORIGUCHI
ProofSummit2013 べらべらAbella
Sosuke MORIGUCHI
Recently uploaded
(17)
PDF
9_前田音葉さん:「Yakushima Islandってなんか変じゃない?」.pdf
ssuser3fcec0
PDF
10_「孤独は敵なのか?」 桜花学園高等学校堀川愛可さんinspirehigh.pdf
ssuser3fcec0
PDF
5_「AIと仲良くなるには?」日本大学東北高等学校南梨夢乃さんinspirehigh.pdf
ssuser3fcec0
PDF
7_「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」明治大学付属中野八王子中学校宮本ゆりかさん.pdf
ssuser3fcec0
PDF
13_「他者と自分、対立を防ぐには?」市原中央高等学校 大野リリinspirehigh.pdf
ssuser3fcec0
PDF
外国人が日本のテーブルマナーに驚く理由は?_公文国際学園高等部 角田 恵梨佳さん
ssuser3fcec0
PDF
8_「世の中の流行はどのようにして生まれるのか」学校法人聖ドミニコ学園竹野はるいpptx.pdf
ssuser3fcec0
PDF
共同売店から考える沖縄の新しい流通のしくみ2025琉球大学流通原論講義資料.pdf
Kyodo-Baiten Fanclub 共同売店ファンクラブ
PDF
My Inspire High Award 2024(岡田秀幸).pptx.pdf
ssuser3fcec0
PDF
14_「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」公文国際学園高等部古澤琴子.pdf
ssuser3fcec0
PPTX
PPT KANJI IRODORI SHOKYUU 1 BAB 9 (FURIGANA)
hayyinfatika
PDF
「なぜ、好きなことにいつかは飽きるの?」大塚莉子 - My Inspire High Award 2024.pdf
ssuser3fcec0
PDF
3_「本当の『悪者』って何?」鷗友学園女子中学校_福島 雪乃さんinspirehigh.pdf
ssuser3fcec0
PDF
6_「老いることは不幸なこと?」植草学園大学附属高等学校森 珠貴さんinspirehigh.pdf
ssuser3fcec0
PDF
11_「なぜ議会への関心が低いのか?」長野県長野西高等学校 片桐 菜々美さん.pdf
ssuser3fcec0
PDF
12_「家族とは何か」星の杜中学校小倉ももこ『家族ってなに』inspirehigh.pdf
ssuser3fcec0
PDF
12_星の杜中学校小倉ももこ『家族ってなに』inspirehigh発表物.pdf
ssuser3fcec0
9_前田音葉さん:「Yakushima Islandってなんか変じゃない?」.pdf
ssuser3fcec0
10_「孤独は敵なのか?」 桜花学園高等学校堀川愛可さんinspirehigh.pdf
ssuser3fcec0
5_「AIと仲良くなるには?」日本大学東北高等学校南梨夢乃さんinspirehigh.pdf
ssuser3fcec0
7_「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」明治大学付属中野八王子中学校宮本ゆりかさん.pdf
ssuser3fcec0
13_「他者と自分、対立を防ぐには?」市原中央高等学校 大野リリinspirehigh.pdf
ssuser3fcec0
外国人が日本のテーブルマナーに驚く理由は?_公文国際学園高等部 角田 恵梨佳さん
ssuser3fcec0
8_「世の中の流行はどのようにして生まれるのか」学校法人聖ドミニコ学園竹野はるいpptx.pdf
ssuser3fcec0
共同売店から考える沖縄の新しい流通のしくみ2025琉球大学流通原論講義資料.pdf
Kyodo-Baiten Fanclub 共同売店ファンクラブ
My Inspire High Award 2024(岡田秀幸).pptx.pdf
ssuser3fcec0
14_「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」公文国際学園高等部古澤琴子.pdf
ssuser3fcec0
PPT KANJI IRODORI SHOKYUU 1 BAB 9 (FURIGANA)
hayyinfatika
「なぜ、好きなことにいつかは飽きるの?」大塚莉子 - My Inspire High Award 2024.pdf
ssuser3fcec0
3_「本当の『悪者』って何?」鷗友学園女子中学校_福島 雪乃さんinspirehigh.pdf
ssuser3fcec0
6_「老いることは不幸なこと?」植草学園大学附属高等学校森 珠貴さんinspirehigh.pdf
ssuser3fcec0
11_「なぜ議会への関心が低いのか?」長野県長野西高等学校 片桐 菜々美さん.pdf
ssuser3fcec0
12_「家族とは何か」星の杜中学校小倉ももこ『家族ってなに』inspirehigh.pdf
ssuser3fcec0
12_星の杜中学校小倉ももこ『家族ってなに』inspirehigh発表物.pdf
ssuser3fcec0
Ad
Featured
(20)
PDF
2024 Trend Updates: What Really Works In SEO & Content Marketing
Search Engine Journal
PDF
Storytelling For The Web: Integrate Storytelling in your Design Process
Chiara Aliotta
PDF
Artificial Intelligence, Data and Competition – SCHREPEL – June 2024 OECD dis...
OECD Directorate for Financial and Enterprise Affairs
PDF
How to Leverage AI to Boost Employee Wellness - Lydia Di Francesco - SocialHR...
SocialHRCamp
PDF
2024 State of Marketing Report – by Hubspot
Marius Sescu
PDF
Everything You Need To Know About ChatGPT
Expeed Software
PDF
Product Design Trends in 2024 | Teenage Engineerings
Pixeldarts
PDF
How Race, Age and Gender Shape Attitudes Towards Mental Health
ThinkNow
PDF
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
marketingartwork
PDF
Skeleton Culture Code
Skeleton Technologies
PDF
PEPSICO Presentation to CAGNY Conference Feb 2024
Neil Kimberley
PDF
Content Methodology: A Best Practices Report (Webinar)
contently
PPTX
How to Prepare For a Successful Job Search for 2024
Albert Qian
PDF
Social Media Marketing Trends 2024 // The Global Indie Insights
Kurio // The Social Media Age(ncy)
PDF
Trends In Paid Search: Navigating The Digital Landscape In 2024
Search Engine Journal
PDF
5 Public speaking tips from TED - Visualized summary
SpeakerHub
PDF
ChatGPT and the Future of Work - Clark Boyd
Clark Boyd
PDF
Getting into the tech field. what next
Tessa Mero
PDF
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Lily Ray
PDF
How to have difficult conversations
Rajiv Jayarajah, MAppComm, ACC
2024 Trend Updates: What Really Works In SEO & Content Marketing
Search Engine Journal
Storytelling For The Web: Integrate Storytelling in your Design Process
Chiara Aliotta
Artificial Intelligence, Data and Competition – SCHREPEL – June 2024 OECD dis...
OECD Directorate for Financial and Enterprise Affairs
How to Leverage AI to Boost Employee Wellness - Lydia Di Francesco - SocialHR...
SocialHRCamp
2024 State of Marketing Report – by Hubspot
Marius Sescu
Everything You Need To Know About ChatGPT
Expeed Software
Product Design Trends in 2024 | Teenage Engineerings
Pixeldarts
How Race, Age and Gender Shape Attitudes Towards Mental Health
ThinkNow
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
marketingartwork
Skeleton Culture Code
Skeleton Technologies
PEPSICO Presentation to CAGNY Conference Feb 2024
Neil Kimberley
Content Methodology: A Best Practices Report (Webinar)
contently
How to Prepare For a Successful Job Search for 2024
Albert Qian
Social Media Marketing Trends 2024 // The Global Indie Insights
Kurio // The Social Media Age(ncy)
Trends In Paid Search: Navigating The Digital Landscape In 2024
Search Engine Journal
5 Public speaking tips from TED - Visualized summary
SpeakerHub
ChatGPT and the Future of Work - Clark Boyd
Clark Boyd
Getting into the tech field. what next
Tessa Mero
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Lily Ray
How to have difficult conversations
Rajiv Jayarajah, MAppComm, ACC
Ad
PEGの回文っぽいExpression
1.
PEGの回文っぽいExpression @chiguri
2.
このスライドはなんのため? 一時期(ごくごく一部で)話題になったPEG (Parsing Expression
Grammar)による回文っ ぽいものがどういう言語を受理するか、を考える ための資料 PEGの動きを理解するのに使えるかもしれない。 使えないかもしれない。 http://togetter.com/li/899899 で私とkmizuさ んがいろいろ考えているやつ
3.
背景 aとbからなる回文をCFG(BNF)で書くと以下の ようになる。 S
::= “a” S “a” | “b” S “b” | “” 偶数長の回文だけだが、簡単に拡張できるので無視 PEGのParsing Expressionで似た式を書くと以下 のようになる。 S ::= “a” S “a” / “b” S “b” / “” |が/になっている。
4.
このPEは受理しない回文がある この式は、“aa”、“abba”、“abbbaabbba”を受理 する。 それぞれ“a”、“ab”、“abbba”を折り返した回文。
しかし、“abbaabba”を受理しない。 これは“abba”を折り返した回文。 なぜ?
5.
注意 私はPackrat Parsing(PEGを有用に、有名にした 構文解析手法)を知らない。
メモ化や遅延評価を使うことで入力長のオーダーで構 文解析できる手法である、くらいまで したがって、これ以降Packrat Parsingの話はしな いし、できない。 個人的な感想だが、多くの場合、高速化手法は人間の 解釈に向かない。
6.
Recursive Descent Parsing
元々のPEGの特徴付けに用いられていたもの。 解釈方法が若干特殊なため、CFGの考え方を引き ずるとこんがらがるが、動きはシンプル。 大きく違う点は、|ではなく/を使う部分、特にこ れが絡んだ再帰的な場合の動き。 他にも先読みなどがあるのだが、割と直感的なのでこ こでは無視することにする。
7.
表現のしかた 以降では、与えられた文字列を 「読んだが規則が成功するか決まっていない部分」 「読んだ結果規則が成功した部分」 「まだ読んでいない部分」 の三つに分ける。 それぞれ赤、青、黒で表す。 必ずこの順序で現れるが、可視性のため矢印でも 区切り箇所を表す。
下からの矢印が最初の、上からの矢印が次の区切り。 “aaaaaaaaaaaaaaaaaaaaa”
8.
回文っぽいものを例に S ::=
“a” S “a” / “b” S “b” / “” 対象は”abba”、全体はS !.とする(S以外は何も含 まない) “abba”
9.
一文字目 S ::=
“a” S “a” / “b” S “b” / “” まずaを読み、Sの最初の規則を試す。 “a”にマッチするのでS “a”がスタックに積まれ、次へ。 “abba”
10.
二文字目 S ::=
“a” S “a” / “b” S “b” / “” 次の文字bを読み、Sの最初の規則を試す。 “a”にマッチしないので失敗する “abba”
11.
二文字目 S ::=
“a” S “a” / “b” S “b” / “” 次の規則を試す。 “b”にマッチするのでS “b”がスタックに積まれ、次へ。 “abba”
12.
三文字目 S ::=
“a” S “a” / “b” S “b” / “” 次の文字bを読み、Sの最初の規則を試す。 失敗する。 “abba”
13.
三文字目 S ::=
“a” S “a” / “b” S “b” / “” 次の規則を試す。 S “b”がスタックに積まれ、次へ。 “abba”
14.
四文字目 S ::=
“a” S “a” / “b” S “b” / “” 次の文字aを読み、Sの最初の規則を試す。 S “a”がスタックに積まれ、次へ。 “abba”
15.
終端 S ::=
“a” S “a” / “b” S “b” / “” 次の文字はないが、Sの最初の規則を試す。 aがないので失敗。 “abba”
16.
終端 S ::=
“a” S “a” / “b” S “b” / “” 次の規則を試す。 bがないので失敗。 “abba”
17.
終端 S ::=
“a” S “a” / “b” S “b” / “” 次の規則を試す。 何も読まないので成功。 “abba”
18.
スタックを一つ戻す S ::=
“a” S “a” / “b” S “b” / “” スタックを戻して、成功していた規則を続ける。 Sの次にaがないので失敗。状態を規則を試す前に戻す。 “abba”
19.
失敗から次の試行へ S ::=
“a” S “a” / “b” S “b” / “” 成功していた規則をやめて次の規則へ移る。 次はbではないので失敗。 “abba”
20.
最後の規則へ S ::=
“a” S “a” / “b” S “b” / “” 次の規則へ移る。 何も読まなくて良いので成功。 “abba”
21.
スタックを一つ戻す S ::=
“a” S “a” / “b” S “b” / “” スタックを戻して、成功していた規則を続ける。 Sの次にbがないので失敗。状態を規則を試す前に戻す。 “abba”
22.
失敗から次の試行へ S ::=
“a” S “a” / “b” S “b” / “” 成功していた規則をやめて次の規則へ移る。 何も読まなくて良いので成功。 “abba”
23.
スタックを一つ戻す S ::=
“a” S “a” / “b” S “b” / “” スタックを戻して、成功していた規則を続ける。 次がbなので成功。規則全体が完成。bbは読み終え。 “abba”
24.
スタックを一つ戻す S ::=
“a” S “a” / “b” S “b” / “” スタックを戻して、成功していた規則を続ける。 次がaなので成功。規則全体が完成。 “abba”
25.
終了 S ::=
“a” S “a” / “b” S “b” / “” スタックが空なので、解析全体が成功。 “abba”
26.
成功時→失敗時 成功する場合の挙動はCFGとほぼ同じだが、失敗 時の巻き戻し方が少し違う。 規則が失敗した場合、青になった部分(一度決定した 部分)について他の規則を試さずに赤の部分ごと戻す。
27.
失敗する例 S ::=
“a” S “a” / “b” S “b” / “” 対象は”aaaa”、全体はS !.とする 以下、二つ目の規則は絶対に失敗するので無視する。 “aaaa”
28.
一文字目 S ::=
“a” S “a” / “b” S “b” / “” まずaを読み、Sの最初の規則を試す。 “a”にマッチするのでS “a”がスタックに積まれ、次へ。 “aaaa”
29.
二文字目 S ::=
“a” S “a” / “b” S “b” / “” aを読み、Sの最初の規則を試す。 “a”にマッチするのでS “a”がスタックに積まれ、次へ。 “aaaa”
30.
三文字目 S ::=
“a” S “a” / “b” S “b” / “” aを読み、Sの最初の規則を試す。 “a”にマッチするのでS “a”がスタックに積まれ、次へ。 “aaaa”
31.
四文字目 S ::=
“a” S “a” / “b” S “b” / “” aを読み、Sの最初の規則を試す。 “a”にマッチするのでS “a”がスタックに積まれ、次へ。 “aaaa”
32.
終端 S ::=
“a” S “a” / “b” S “b” / “” 文字がないので、最後の規則のみマッチする。 “aaaa”
33.
スタックを一つ戻す S ::=
“a” S “a” / “b” S “b” / “” スタックを戻して、成功していた規則を続ける。 Sの次にaがないので失敗。状態を規則を試す前に戻す。 “aaaa”
34.
失敗から次の試行へ S ::=
“a” S “a” / “b” S “b” / “” 成功していた規則をやめて次の規則へ移る。 何も読まなくて良いので成功。 “aaaa”
35.
スタックを一つ戻す S ::=
“a” S “a” / “b” S “b” / “” スタックを戻して、成功していた規則を続ける。 次がaなので成功。規則全体が完成、読み終えへ。 “aaaa”
36.
スタックを一つ戻す S ::=
“a” S “a” / “b” S “b” / “” スタックを戻して、成功していた規則を続ける。 次がないので失敗。この規則を試す前の状態へ戻す。 二文字目を読む前 “aaaa”
37.
失敗から次の試行へ S ::=
“a” S “a” / “b” S “b” / “” 成功していた規則をやめて次の規則へ移る。 何も読まなくて良いので成功。 “aaaa”
38.
スタックを一つ戻す S ::=
“a” S “a” / “b” S “b” / “” スタックを戻して、成功していた規則を続ける。 次がaなので成功。規則全体が完成、読み終えへ。 “aaaa”
39.
S全体の終了、失敗 S ::=
“a” S “a” / “b” S “b” / “” 全体を読み終えたが、末尾に文字があるので失敗。 これはマッチしない。 “aaaa”
40.
本来成功するには S ::=
“a” S “a” / “b” S “b” / “” 以下の状態で、最後の規則を試す必要がある。 「折り返し地点まで繰り返し規則で読むこと」 “aaaa”
41.
失敗例では S ::=
“a” S “a” / “b” S “b” / “” 折り返し地点を飛ばした状態へ巻き戻される。 「折り返し地点にはもう到達できない」 “aaaa” “aaaa”
42.
「成功した部分が他の規則を使えた場合に」 「他の規則を試行しないため」真ん中を折り返し とみなす規則が適用されなかった。 “abbaabba”の場合も、後ろの”abba”が成功して しまうせいで全体がうまくいかなくなる。
下の赤部分の最後、aが読まれた規則に失敗して戻る。 “abbaabba”
43.
部分的に回文があると、そこにマッチして折り返 し地点ごと規則が巻き戻される場合がある。これ が原因で失敗している。 PEGで S
::= “a” S “a” / “” が2^n-2の長さしか読めないのも失敗の巻き戻しが まとめて行われるため。
44.
結局元のPEは何を受理するか 「後ろから順に、言語に含まれる文字列を見つけ ては排除して、その中に折り返し地点が含まれた ら拒否されるがそれ以外の回文は受理する」とい うよく分からない言語。 面倒な例を挙げれば“aabbaabbaa”は受理されないが、 “aabbaaaaaabbaa”は受理される。
下線部は回文でしかも折り返し地点を含むが、青い部分がよ り後ろにあり優先されるためその部分の回文は受理されない。 青の失敗時に折り返し地点の直後まで戻される。 嗚呼面倒臭・・・だれか定式化してください。
45.
おまけ:HOPEG kmizuさんが考えている、パラメータ付きの非終 端記号(rule constructor)を導入したPEG
REP(s) ::= s REP(s) / “” のような式が書ける。 REP(“a”)で“a”*のような動きをする。 処理系はここに https://github.com/kmizu/hopeg HO(Higher Order)といっているがパラメータ はParsing expressionのみ想定。 kmizuさんは元々Parametricと言っていたが、私が横 から「HOっぽい」と言ったためこの名前に。
46.
HOPEGのパラメータ パラメータには任意のParsing Expressionを渡し て良いので、こんなものも書ける。
S(r) ::= ... S(“a” r) ... 再帰呼び出しの度にrの先頭で”a”のチェックが増える。 ある種の「残りをスタックに積む」ようなことが可能に。
47.
HOPEGによる回文 HOPEGで回文を受理する式は以下のように書ける。 PAL(s)
::= “a” PAL(“a” s) / “b” PAL(“b” s) / r PEGで失敗していたのと違い、「最初に全てのrで 成功した一番後ろ」が取られる。 折り返し地点より後ろでは(文字数が足りないため) 必ず失敗する。 中央で必ず成功する。 「折り返し全体が成功するまで部分的な成功がない」 ことでPEGで起こった問題を回避している。
Download