我有一個使用XML配置文件,其中我所描述的部件佈局的應用程序。 目前我有3種佈局:網格,水平和垂直。 我想創建一個將使用這三個的佈局。在一箇中使用多個解析器的方式:這是一個安全的代碼嗎?
終於讓我找到一個辦法做到這一點:每個佈局類的我定義佈局類在聲明中初始化它們的保護包保護領域。我的一般規則使用這些字段。要記住的唯一的事情是,他們都有自己的堆棧,這不是一個問題,因爲你可以這樣調用代碼:push(gridLayoutParser.pop())
。
這裏是不同的解析器的使用的一個例子:
第一個孩子解析器:
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 ")
);
}
}
第二個是一樣的:
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())
)
)
)
);
}
}
對我來說工作正常。但是對於更復雜的語法,它會好嗎?