簡體   English   中英

Parsekit或我自己解析?

[英]Parsekit or parse on my own?

我正在編寫一個應用程序,我需要解析葡萄酒菜單。 從我到目前為止看到的,它們都遵循一些結構,訣竅將是定義所有的結構。 我現在正在探索使用Parsekit並創建語法,但學習曲線非常陡峭。 我認為我不會在接下來的幾個星期里把它搞清楚,然后意識到這不是正確的方法。

人們在解析這些事情時想要分享的任何見解/資源? 謝謝,奧利維爾

這里是ParseKit的開發者。

(我的回答要記住一件事:雖然我是ParseKit的開發人員,但我並沒有真正設計框架或它的API。它主要基於Steven Metsker的書“ 用Java構建解析器”中的特定設計。我只是移植了他們到ObjC / Cocoa。)


ParseKit由三部分組成:

  1. 高度靈活的高性能Objective-C TokenizerPKTokenizerPKToken類)
  2. 一個完全動態的Objective-C Parser工具包,用於構建具有無限前瞻( PKParser類和sublcasses)的回溯,遞歸優勢解析器。 由於其動態性,此解析器工具包的性能對於大輸入而言較差。
  3. 通過語法生成Objective-C解析器 - 使用BNF樣式的語法語法(類似於yacc或ANTLR)為您的自定義語言生成Objective-C解析器。 解析時,解析器將為您的Objective-C代碼提供回調。 由於#2的動態性,編寫語法相對容易,並且對語法中可以做的事情的限制相對較少。

上面的每個組件都基於先前的組件。 所以#3 - 語法工具包 - 使用#1令牌化器和#2解析器工具包。

如果你正在做任何嚴肅的解析任務,我總是建議檢查#1 - tokenizer - PKTokenizer 它非常靈活,功能強大,性能非常好。 如果你更容易處理令牌而不是輸入字符串 (通常是),你可能想要檢查一下。

至於#2(ObjC Parser工具包),你通常只想跳過它並轉到#3,因為通過語法構建解析器要比通過ObjC代碼構建解析器好得多。

對於#3(通過BNF Grammars的ObjC Parser工具包),最重要的考慮因素是性能。 ParseKit的解析器工具包適用於解析相對較小的輸入字符串。 一些例子可能是:

  1. XPath樣式的查詢語言
  2. SQL
  3. 相對簡明的DSL或命令語言
  4. 常用表達
  5. 菜單(或者可以分解為相對較小句子的平面數組的東西)

由於性能問題,ParseKit的解析器工具包通常適合解析較大的輸入字符串。 一些例子可能是:

  1. XML文檔
  2. JSON文檔

ParseKit當然可以(並且確實)解析這些類型的輸入,但是由於ParseKit的動態性(回溯,infinte lookeahead),與專用的XML或JSON解析器相比,性能很差。


對於“葡萄酒菜單” ,我會說,是的 - ParseKit可能是一個很好的(可能是很好的)解決方案。 特別是如果你可以將輸入的各行分成一個字符串數組並逐個解析它們。 性能應該非常好,一旦你克服了學習曲線,ParseKit對於這些類型的工作來說非常強大/方便。

事實上,IIets,Metsker的原着書甚至使用這樣的東西作為好用的工具包的一個例子。

希望這可以幫助。

暫無
暫無

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

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