私はParsekit for XCodeを使用していますが、この問題はほとんどのパーサージェネレータによく当てはまります。私はgammerとスクリプトを解析し、それは正常に動作します。しかし、私は次のステップで問題にぶち当たっています。 grmmerを考えてみましょう。Parsekitを使ってパーズツリーを構築する
@start = line +; line = tree;
tree = 'tree' fruits branches;
fruits = 'with' 'fruits' Number; branches = 'with' 'branches' Number;
そして合格するためのスクリプト:
木を枝12
と果物8と、私はその後、implemenet一致させる方法、果物や枝が一度一致する場合は、これが期待されています。
ただし、ツリーは2回マッチングされますが、なぜですか?これは、私が望む解析木を構築するのを止める。
ありがとうございました!
こんにちはTodd、 ありがとうございました。私が作業しているものをアセンブリの目標に格納しますか? 私はそれを見て、私は 'ツリー'に合ってパスツリーに追加し、 'フルーツ'と 'ブランチ'とマッチさせて子供などに追加します。 ターゲットソリューションを使用するには? Parsekit btwの良い仕事:) – FBryant87
答えは、あなたがビルドしている抽象的なツリー/グラフのルートオブジェクト(私は思う? "と思う?)を、現在のPKAssemblyのターゲットではなく、ivarとして保存することだと思います。現在のPKAssemblyは、最初に作成するものか、-didMatchXXX:メソッドに渡すものです。解析によって構築している「もの」は、常に現在のアセンブリのターゲットにする必要があります。ビルドしている「もの」は決してivarやグローバル変数であってはいけません。 –