Lemon Parserの.yファイルで、ヒアドキュメント構文を表現するための記述はどのように書けばいいのでしょうか?
PHP_ParserGeneratorを使用し、「PHPを解析する」構文解析器を作成したいと考えています。
PHP_ParserGeneratorはLemon ParserをPHPに移植したものなので、Lemon Parserに順序した.yファイルを作成することで構文解析器を生成します。
.yファイルの記述については、以下に記載されています。
The Lemon Parser Generator (日本語版)
上記ドキュメントを読む限り、何とかなりそうな気がしてきました。
が、ヒアドキュメント構文は例外です。私には、どのように記述すればよいものか分かりません。
参考までに、以下がヒアドキュメント構文になります。
lang
1$str = <<<EOD 2Example of string 3spanning multiple lines 4using heredoc syntax. 5EOD; 6 7$str = <<<HTML 8<div>example</div> 9HTML;
<<<
に続き、英数字及びアンダースコアで構成される任意のID、改行でヒアドキュメントが開始します。
その後にある、開始行と同じ値の任意のIDと;
のみが存在する行が文字列の終わりで、開始行からその行までの間にある文字列が変数に格納されます。
ヒアドキュメント構文が.yファイルで表現できそうにない最大の理由は、任意の文字列から任意の文字列まで、という指定が困難であることです。
実際に記述する場合、ヒアドキュメント構文の任意のIDをトークン1つとして表現することになると考えていますが、
私がドキュメントを読んだ限り、あるトークンと同じ値のトークンを参照するような構文が見当たりません。
そもそも、トークンに記号などの値を割り当てるのは字句解析器の役割であって、構文解析器そのものはトークンの内容は解釈しないものと思います。
つまり、Lemon Parserではヒアドキュメント構文を記述するのは不可能、となってしまいます。
私には、Lemon Parserでヒアドキュメント構文を表現するにはどうすればよいのかまるで分かりません。
Lemon Parserの.yファイルで、ヒアドキュメント構文を表現するための記述はどのように書けばいいのでしょうか?
なお、「PHPを解析する」構文解析器としてnikic/PHP-Parserが存在しますが、PHP以外の構文も含められる柔軟な形式のファイルを構文解析する事が最終目的のため、自作する必要があります。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/06/06 05:00