2015-01-07 64 views
2

對於那些沒有看到它的人來說,ZPL是一種基於文本的標記語言,用於從特殊用途打印機打印標籤。 UPS運輸標籤將是一個很好的例子。我需要學習如何爲ZPL編寫詞法分析器解釋器?

標記語言是相當原始的。有一些模態命令可以設置幾個狀態值,但是大部分語言都是一行,格式爲​​。沒有流量控制或嵌套。

我想寫一個渲染引擎來解釋ZPL並呈現給圖像。有幾個項目已經開始了這條道路,但這些項目還不夠完整,無法用於商業用途。

我的問題是:我需要學習如何編寫一個很好的<something>來解析ZPL文檔並將其轉換爲我可以執行的命令? ('執行',我的意思是繪製。)

這是一個解析器嗎?一個詞法分析器?標記生成器?翻譯嗎?是否有一些編譯器設計理論的子集將成爲這類項目成功的最有效途徑? ......那叫什麼?

+0

只是好奇,但你能分享你需要這個理由嗎?我與ZPL合作很多,雖然這將是一個有趣的工具,但我不知道我是否會需要它。這將是一個有趣的項目!謝謝! –

+0

我們希望能夠在ZPL中編寫一次標記,並使用該標記打印到任何介質:ZPL打印機,激光打印機,屏幕圖像。我見過一種承諾一次編寫(使用C#)的產品,導出任何東西,標籤代碼。然而,該庫的ZPL輸出非常冗長。這使得ZPL打印太慢而不實用。 – user3384842

+0

我想我遲到了,我也只是在說一個意見,但在我看來,沒有任何花哨的工具需要,因爲ZPL只是一個沒有嵌套的線性命令的序列,並且所有的命令都以「 ^「或」〜「字符,因此只要基本的正則表達式或甚至string.split(」「)就足夠了... –

回答

2

就你而言,它可能是一個解釋器。

如果沒有條件,那麼大概是通過從上到下閱讀ZPL文檔產生標記。

你需要的是一個解析器來分解ZPL命令。如果在撕開一個之後運氣很好,則可以使用命令的參數或以前的ZPL模態命令來執行所需的所有操作。

所以:

loop 
    parse ZPL fragment 
    execute ZPL fragment 
end loop 

如果你想閱讀有關創建簡單解析器,你可以在這裏做到這一點:Is there an alternative for flex/bison that is usable on 8-bit embedded systems?

這應該是顯而易見的,在那裏解析已經認識到構建的每個點,它具有來自構造內容的所有信息,因此您準備執行它。

當然,你必須知道ZPL命令是什麼意思,並有機器可用來執行它們。沒有人知道如何將標記請求轉換爲圖像上的更新。如果你知道如何做到這一點,那麼你只是在你面前大量流汗(你爲什麼不去獲得ZPL的工作版本?)。祝你好運。

如果你不知道如何做到這一點,你需要提出另一個問題。如果你不得不詢問所有的解析/解釋/執行,你不可能完成這個項目。

2

您需要了解正則表達式是什麼,管理詞法分析器的單個規則(最長匹配獲勝)以及解析器的工作方式。

Scott Stanchfield ANTLR 3.x Tutorial有很好的介紹這個主題(和樂趣),即使你不會使用ANTLR值得關注。

然後你需要知道ZPL本身。

對於C#已經有一些詞法和語法分析器發電機通常與一些例子讓你舒服 - 剛剛評選爲IronyCoco/RGOLDANTLRLLLPGSprache,還是我NLT

+0

謝謝@greenoldman。按照你的建議,我已經看過其中的一些。很有意思。 – user3384842

相關問題