簡體   English   中英

在Java中解析非平面文件格式的最佳方法是什么?

[英]What is the best way to parse a non-flat file format in Java?

我試圖用Java解析嵌套文件格式。

文件格式如下所示:

head [

    A [
        property value
        property2 value
        property3 [
            ... down the rabbit hole ...
        ]
    ]

    ... more As ...

    B [
        .. just the same as A
    ]

    ... more Bs ...
]

將此解析為我的程序的最佳/最簡單的技術是什么?

  • 有限狀態機?

  • 手動逐字閱讀並跟蹤我所處的結構的哪個部分?

  • 寫一個語法......?

作為旁注,我無法控制格式 - 因為我知道有人會說出來!

如果語法確實是這樣嵌套的,那么編寫一個非常簡單的自上而下的解析器將是一項微不足道的任務:您只需要很少的令牌來識別,並且嵌套結構可以非常方便地為教科書遞歸下降解析器重復。

我甚至不打算使用ANTLR或其他解析器生成器這么簡單,因為學習曲線會占用項目的潛在好處*


*學習解析器生成器的潛在好處很難被高估:如果您可以花一兩天時間學習使用ANTLR構建解析器,您對結構化文本文件的視圖將永遠改變。

我是第二個看看Antlr的建議。 StAX增加了類似SAX的事件處理。

http://www.antlr.org/wiki/display/ANTLR3/Interfacing+StAX+to+ANTLR

是的,有一個學習曲線,但是當你處理所有奇怪的情況並調試你的代碼時,你可能會收支平衡 - 你的簡歷上有一個新項目。

可以說,解析這些類文件的最簡單方法是使用遞歸下降解析器( http://en.m.wikipedia.org/wiki/Recursive_descent_parser )。 我想這就是你手動閱讀和跟蹤你找到的結構的意思。

如果您必須能夠處理無限制的嵌套,那么有限狀態機將無法工作。 如果只有兩個級別就足夠了。

編寫語法並生成解析器也可以,但如果您之前沒有這樣做或者沒有時間學習如何使用這些工具,那么它可能有點過分......

最快的方法是使用這樣的格式,例如JSon或YAML。 這些格式執行此操作並受支持。

作為旁注,我無法控制格式

如果你想知道解析像Yaml這樣的東西的最好方法,那就是閱讀一個簡單的Yaml解析器的代碼。

只是解析文件不太可能,您還需要觸發事件或從您加載的數據生成數據模型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM