1

私はIronyを使用していくつかのXMLコードを解析しようとしています。文法を次のように定義しました。

this.Root = tagList;
tagList.Rule = this.MakeStarRule(tagList, tag);
tag.Rule = conditionBlock;

ifTagOpen.Rule = <  + "a" + "condition" + equals + "'i'" + >;
ifTagClose.Rule = <  + slash + "a" + >;
elseIfTag.Rule = <  + "b" + "a" + equals + "'i'" + >;
elseTagClose.Rule = <  + slash + "a" + >;

conditionBlock.Rule = ifTagOpen + ifTagCloseElseIf | ifTagOpen + tag + ifTagCloseElseIf;
elseIfTagBlock.Rule = elseIfTag + elseTagClose;
ifTagCloseElseIf.Rule = ifTagClose | ifTagClose + elseIfTagBlock | Empty;

さて、私がこのようなものを解析しようとすると、 <a condition ='i'><a condition ='i'></a><b a='i'></b></a> それは正常に機能します(期待どおり)。

しかし、私がこのようなことをしようとすると <a condition ='i'><a condition ='i'></a></a> 、それは機能せず<b a='i'>、最初の後に期待することを教えてくれ</a>ます。

私が間違っている場合は訂正してください。ただし、これも解析可能ではありませんか?<b a='i'>最後のルールの最初の生成は、後である必要はないことを明確に示しています</a>。パーサーが最初の後に別の「<」に遭遇した後、</a>最後のルールifTagClose + elseIfTagBlockの2番目の生成を適用しようとするため、が期待されると思い<b a='i'>ます。すべての端末の先頭から削除すると、期待どおりに機能するため、「<」の先頭に問題があると確信しています。

カスタム解析アクションを除いて、これに対する回避策はありますか?または、これに対処する方法を知っているc#用の他の解析エンジンはありますか?

4

0 に答える 0