PEGと構文解析に関するアレコレの勉強会 Vol.1 まとめ
BFNの縦棒は「どちらか」という曖昧さがあるけど、 PEGのスラッシュは「前にマッチしたら前、しなければ後ろ」 という順序的な厳密さがある #peg_study
2015-08-08 14:21:01e_1 / e_2 : e_1を試し、失敗したらe_2を試す。 このあたりは正規表現と違う感じだなー、非可換だし。 #peg_study
2015-08-08 14:21:08yaccやJavaCCは字句解析と構文解析の分離が前提だが、最近の言語の文法と相性が悪い(ヒアドキュメント、string interpolation、文脈依存トークン等)。空白の有無で意味が変わったり、トークンが再帰的な構造を含む文法は苦手。そこでPEG。 #peg_study
2015-08-08 14:23:14はっはっは、素直な結果が帰ってくる処理系はよいですなぁ 今日、素直じゃない結果が帰ってくるPEG.jsのLTやります #peg_study
2015-08-08 14:23:43shift reduce conflict とはこういうことらしい #peg_study if (...) if (...) else <- これはどっちに対応する ?
2015-08-08 14:29:27PEGで嬉しいこと 1.無限長の先読みが可能。字句解析不要で柔軟な文法が記述しやすい 2.曖昧性がなく文法の conflict が起きない。解釈のルールが決まっているので shift/reduce conflict は起こらない(ぶらさがり else とか) #peg_study
2015-08-08 14:30:26空白を明示的に処理する必要があって、 _ = [ " " / "\r" / "\n" / "\t"] とか定義して _ を使ったりするのよくやる #peg_study
2015-08-08 14:31:45規則の順序に依存するのは、実用的にハマりがちな気がする(多用しすぎるのが悪いんだろうけど) #peg_study
2015-08-08 14:31:50PEG で嬉しくないことは PEG の利点と表裏一体。 1.空白の読み飛ばしを明示する必要がある 2.規則の順序を変えると意味が変わってしまう #peg_study
2015-08-08 14:34:25