スタックオーバーフローが発生し始めたとき、ここに来て質問する時が来たと思いました;)
ブーストスピリットの使い方を今勉強中です。基本的なことはわかりました。私は K&R (C の文法を含む) を手元に持っていたので、言語のアクセプターを作成できるかどうかを確認することにしました。とにかく、これは多かれ少なかれ私の当初の目標でした。最終的にはこれをプリプロセッサとして使用して、データ構造などから情報を収集したいからです。
定数と文字列を解析できますが、これを解析しようとすると問題が発生し始めます。
postfix_expression =
primary_expression
// omitting some other rules for simplicity's sake
| (postfix_expression >> chseq+p("++"))
| (postfix_expression >> chseq_p("--"));
primary_expression =
identifier
| constant
| string_literal;
// The parsers for constants and strings are
// pretty trivial so I'm not going to C+P them here.
のようなものを渡すと、i++
失敗します。これは がi
有効であるため、またはprimary_expression
のチェックに進まないためだと思います。一番下に置いてみたところ、スタックオーバーフローが発生しました。ここで無限の左再帰が発生していますが、解決方法がわかりません。++
--