2011-10-27 81 views
3

我正在尋找檢查S-表達式的格式/模式的工具。S表達式的良好形式/模式

您是否知道這些工具?

由Paul Nathan精心準備的,我正在尋找的是一個用於sexp的Schema驗證器。

+1

這是有點令人驚訝的是,沒有架構存在啓用基於sexp的數據表示檢查。 – JCLL

+0

我幾年前寫的一個工具檢查了人體的平衡性,這是你所需要的。如果你正在用XML模式來思考,那有什麼意義?語法簡單。 –

+1

@Paul:你說的是sexp的具體語法,而我正在談論以sexp爲代表的'語言'的抽象語法。想象一下,我定義了一個基於S-expr的新格式,用專門的「關鍵字」標記:我如何確保實際的s-expr尊重這種格式? – JCLL

回答

2

我懷疑OP的問題是用S表達式和Lisp替換XML技術棧。

S表達式的慣用方法是實現臨時驗證器和變換器,爲特定數據格式量身定製。由於Lisps幾乎是聲明式的(並且它們允許在其上定義無數可能的聲明性語言),所以不需要像XML Schema或DTD這樣的專用通用解決方案。

根據您使用的Lisp風味,您可以選擇適合您需求的模式匹配庫。嵌入式Prolog實現(如Schelog)也可以提供幫助。

+0

模式的要點是它比代碼更可讀 - 我可以立即看到,而不是foo.bar不是可選的,它必須是3到9之間的一個整數。使用臨時驗證器,此信息將不可理解非Lispers。 – fadedbee

0

S表達式並沒有真正的模式,因此。合式S表達​​式的東西接近正常語法描述符合(非常粗略地):

atom := <character>+ 
sexp := atom | '(' sexp* ')' 

即,S-exp爲一個單一的原子或零個或多個S-表達式列表。爲此寫一個驗證器應該不會太難。

+0

如果誰投了票,可以留下評論,說明原因。 – Vatine

+0

您已經表達了相當於說xml標籤以開頭,這與DTD對XML所做的完全不同。 –

+0

@AlexBrown那麼,S表達式不*有*模式。 S表達式幾乎是一系列平衡的括號表達式。 – Vatine