パーボイルド Java ライブラリを使用して単純な XML パーサーを作成しようとしています。
次のコードでは、変数を使用して、終了タグに開始タグと同じ識別子が含まれていることを確認しようとしています。
class SimpleXmlParser2 extends BaseParser<Object> {
Rule Expression() {
StringVar id = new StringVar();
return Sequence(OpenElement(id), ElementContent(), CloseElement(id));
}
Rule OpenElement(StringVar id) {
return Sequence('<', Identifier(), ACTION(id.set(match())), '>');
}
Rule CloseElement(StringVar id) {
return Sequence("</", id.get(), '>');
}
Rule ElementContent() {
return ZeroOrMore(NoneOf("<>"));
}
Rule Identifier() {
return OneOrMore(CharRange('A', 'z'));
}
}
org.parboiled.errors.GrammarException: 'null' cannot be automatically converted to a parser Rule
ただし、 ParseRunner を作成すると、上記はエラー メッセージで失敗します。
変数がパーボイルドでどのように使用されるべきかについて、私は基本的な誤解をしているようです。誰でもこれを解決するのを手伝ってもらえますか?