0
我有一個處理自定義屬性文件的正則表達式解析器。在我的文件,我有以下結構:如何解析未指定順序的屬性集?
...
[NodeA]
propA=val1
propB=val2
propC=val3
[NodeB]
...
我定義的處理NodeA發生如下解析器:
lazy val parserA: Parser[String] = "propA" ~> "=" ~> mPropA
lazy val parserB: Parser[String] =
...
lazy val nodeA: Parser[NodeA] = "[" ~> "NodeA" ~> "]" ~> parserA ~> parserB ~> parserB ^^ {
case iPropA ~ iPropB ~ iPropC => new NodeA(iPropA, iPropB, iPropC)
}
這工作得很好,因爲它主張。問題是如果NodeA帶有不同的屬性順序,在這種情況下,我得到一個解析錯誤。例如:
[NodeA]
propC=val3
propA=val1
propB=val2
是否有任何方法來定義我的分析器,使其接受未指定的NodeA屬性的順序?
我不明白的問題。只需在等號前解析字符串,然後查看它是否正確。我認爲不需要'propA','propB'等。 – sschaef 2013-03-08 21:58:26
有一個選擇組合符:'|'以及閉包:'*'(無限制),'+'(正數)。 ...「還有更多!」。 – 2013-03-08 22:08:19
@sschaef也許這個片段很混亂。這就是我正在做的。我在等號前解析字符串以獲取所有屬性。最後,我根據讀取的屬性創建NodeA對象,這些屬性必須按特定的順序傳遞。我可以全部閱讀,但我怎樣才能保證他們順利通過? – Dan 2013-03-08 22:13:44