kmizuの日記

プログラミングや形式言語に関係のあることを書いたり書かなかったり。

Macro PEGで「一度現れたら再出現しない修飾子」+「相互排他的な修飾子」を表現してみる

gist.github.com

とりあえずMacro PEGのコード。

「排他的な修飾子」とは何のことかというと、たとえば、public, private, protectedのように、「一度どれかが出現したら他のものは出現しない修飾子」のことです。最近のプログラミング言語の文法では、このような排他的な修飾子はよく見るパターンだと思いますが、これもMacro PEGでサクっと書くことができます。

話は簡単で、前回の記事のMacro PEGに

kmizu.hatenablog.com

引数Scopeを追加して、「排他的な修飾子」の前に、(&Scope)でassertionを書くだけというもの。この例のように、引数として渡された式にand-predicateやnot-predicateを追加することで様々なものを表現することができます。