Mathematica に似た言語用のパーサーを書こうとしていますが、式の部分部分を解析するために私の精神文法を呼び出すとよいことがわかりました。
つまり、解析しようとしている場合
a+b*c+d
parse()
「+」記号を照会しながら「b*c」部分を呼び出すと便利です。
私の文法の同じインスタンスを使用しながら、これを行うことは可能ですか? (文法パラメーターは「*this」になります)
これがこの特定のタスクを達成するための最良の方法であるかどうかはまだ完全には確信が持てませんが、ドキュメントには何も見つからなかったので、興味深い質問だと思います。
この手法を使用する場合、明らかに、クラスローカル変数またはグローバル変数に依存するべきではありません。しかし、精神の設計上、それが原則的に許されているかどうか知りたいです。
編集:
私の文法インスタンスは次のようになります。
class MyGrammar : public boost::spirit::qi::grammar<...>
{
/* a few rules. Some with local and/or inherited attributes */
MyGrammar( void )
{
/* assign all the rules, use a few 'on_error' statements */
// In one or two rules I would like to invoke parse(...,*this,...)
// on a subrange of the expression
}
}
ありがとう!