質問

うことにより書きシェルの言語パーサに進みました。精神。しかし、私は不明の一部についての基本問題に関しての意味 rules.

の文書がメンバー r.alias()r.copy()rule.IIUC、これらは、会員への参照を返しますルールのコピーのルールの内容です。しかし、ところ明示されていない。どのようなときだけ利用ルール定義の他の規則です。私の実験から相互に規則で再帰的に定義できる:

rule<Iter> r1, r2;
r1 = ... >> r2 >> ...;
r2 = ... >> r1 >> ...;

のルールによる参照の内部パーサの表現です。問題は、どのような中にいるときに変数の範囲で、例えば:

rule<Iter> r1;
{ 
  rule<Iter> r2;
  r1 = ... >> r2 >> ...;
  r2 = ... >> r1 >> ...;
}
... // use r1

同注意は、提供を原則から構文解析表現を含むrvalueのルール作業r.copy() うrvalueのタイプ rule もん)?例えば.

rule<Iter> f() { return char_('a') << char_('b'); }
rule<Iter> r1 = ... << f();

誰でも啓発の詳細なセマンティクス rule'sコピーおよび参照して、正誤解です。

役に立ちましたか?

解決

その答えによって異なり版の精神をまつ。


精神。クラシックの精神V1.xする特別なコピーをセマンティクス。の書類は

がルールを参照しますので、どこでも 右側のEBNF 表現のルールが開催される 表現による参考値です。その 責任のクライアントの確保 が参照されるルールに滞在 範囲ではなく破壊 が再び現れるのを確認後、"されます。

のオペレータ基本的に参照しrhsルールを作成することなくディープコピーします。このような工夫をすればもっと:

rule<> r1, r2;
r1 = ...;
r2 = r1;

これ性の高い混乱を防ぎま取り扱いルールと同じように"普通"にオブジェクト。

その理由があったの会員機能 rule::copy(), きを明確に深くコピー原則(インスタンスを格納しているSTLコンテナなし).

同時にこの

r2 = r1.copy();

平間違っています。 r2 "を介して(破壊)臨時のコピー r1 から返される機能 copy().


"まで。Qi(精神.PhpがV2で増えたファイルです。x)の行動は一部を変更します。ルールは正していた場合、取り扱いを外parsers.保存できますが、通常は器総合機構のホームページに掲載のオペレーター公開されました。もので注意する内部パーサの表現ルールが開催される参照も可能を参照していルールと同じように前:

rule<> r1, r2;
r1 = ... >> r2 >> ...;
r2 = ... >> r1 >> ...;

Ru,キーワードが必要ディープコピーの原則があるのでまだの参functon copy.

変更後のコピーを意味して他の副作用によるものです。を構築します。

r1 = r2;

現在の作成(深)のコピー r2, ができないますが、ご了承くださいま r2 すぐそrhsにのみ割り当てられた後に割り当てられ r1.そのための新規加機能 alias を参照セマンティクスこのコーナーの場合:

r1 = r2.alias();

いずれの場合では両方のバージョンの精神までとぶ参考文献の一部についてのルールから参照されるパーサは表現出対象外です。

ちなみに、精神版を実装する機能 rule::ref().

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top