コンポーネントのレイアウトを記述しているxml構成ファイルを使用するアプリケーションがあります。現在、グリッド、水平、垂直の3つのレイアウトがあります。この3つを使ったレイアウトを作りたいです。
最後に、これを行う方法を見つけました。レイアウトクラスごとに、そのレイアウトクラスの保護されたパッケージ保護フィールドを定義し、宣言でそれらを初期化します。私の一般的なルールはそれらのフィールドを使用します。覚えておくべき唯一のことは、それらすべてに独自のスタックがあることです。これは、次のようなコードを呼び出すことができるため、問題ではありませんpush(gridLayoutParser.pop())
。
1つのパーサーの使用例を次に示します。
最初の子パーサー:
public static class P1 extends BaseParser<String> {
public Rule FullContent() {
return Sequence(Content(), EOI);
}
public Rule Content() {
return Sequence(
push(""),
String("STRING1"),
swap() && push(pop() + " fromParser1 "),
String(" SOMESTRING1 ")
);
}
}
2番目は同じです:
public static class P2 extends BaseParser<String> {
public Rule FullContent() {
return Sequence(Content(), EOI);
}
public Rule Content() {
return Sequence(
push(""),
String("STRING2"),
swap() && push(pop() + " fromParser2 "),
String(" SOMESTRING2 ")
);
}
}
そして、ここでそれらの両方を使用するパーサー:
パブリッククラスOPはBaseParserを拡張します{
protected P1 bool1 = Parboiled.createParser(P1.class);
protected P2 bool2 = Parboiled.createParser(P2.class);
public Rule FullContent() {
return Sequence(
push(""),
OneOrMore(
FirstOf(
Sequence(
bool1.Content(),
swap() && push(pop() + bool1.pop())
),
Sequence(
bool2.Content(),
swap() && push(pop() + bool2.pop())
)
)
)
);
}
}
私にとってはうまくいきます。しかし、より複雑な文法でも問題ありませんか?