Can you summarize the following document?
        
  S-表示式格式有許多變體,支援不同資料型別的各種不同語法。最廣泛支援的是:

  S-表示式在Lisp中既用作程式碼,也用作資料(見McCarthy Recursive Functions of Symbolic Expressions )。S-表示式原本被用於將被M-表示式處理的資料,但Lisp的首個實現是一個 S-表示式的直譯器,以 S-表示式編碼 M-表示式,而Lisp程式設計師很快習慣於對程式碼和資料都使用 S-表示式。  S-表示式可以是如數字這樣的單個物件,包括特殊原子codice_10和codice_11在內的LISP 原子,或寫作 codice_12的cons pair。更長的列表則由巢狀的cons pair組成,例如codice_13(,亦可寫作更易理解的codice_14)。  使用字首表示法,程式程式碼可寫作 S-表示式。書寫Lisp程式中額外的語法糖則是,一般的表示式codice_15可以省略為codice_16。

  巢狀列表可以寫為 S-表示式:((milk juice) (honey marmalade))是一個雙元素S-表示式,其元素也是雙元素 S-表示式。Lisp(和本文)中使用的以空格分隔的符號是典型的。換行符(換行符)通常有資格作為分隔符。 這是一個簡單的上下文無關語法的一小部分英語寫成 S-表示式(Gazdar / Melish,Lisp 中的自然語言處理):

  Common Lisp範例:  Scheme範例:

  S-表示式經常與 XML 進行比較,一個關鍵的區別是 S-表示式在語法上要簡單得多,因此更容易解析。例如,可以在幾十行 Python 程式碼中實現一個簡單的 S-表示式解析器。

  1997年5月,羅納德·李維斯特 提交了一份 Internet-Draft,擬作為RFC出版。該草案定義了基於Lisp S-表示式的語法,但旨在用於一般目的的資料儲存及交換(類似XML)而非僅限於程式設計。儘管未被批准為RFC,但此草案已被其他RFC(如RFC 2693)和數種出版物引用。最原始的用途則是在SPKI中。  Rivest的格式定義了 S-表示式為一個八位元組-串(一系列位元組)或其他S-表示式的有限列表。此定義描述了三種表達這種結構的互換格式。一種為“advanced transport”——以格式而言具有很大彈性,且語法上近似於Lisp-風格表示式,但並不等同。例如,advanced transport允許八位元組-串逐字表示(串的長度後跟隨一分號及整個原始的串),引號形式允許轉義字元,十六進位制,Base64,或者在滿足一定條件時直接作為“token”。(Rivest的token與Lisp token不同之處在於前者僅僅為了方便與審美,像其他字串一樣對待,而後者有特別的語法意義。)為了更為緊密,更便於語法分析,獨立於任何抽象的 S-表示式,另一種交換格式“canonical presentation”僅允許逐字表示的字串,格式上禁止字串以外的空白。

  自由軟體:
所謂“S-表示式/運算式”(S-expression)或“sexp”(其中“S”代表“符號的”),是指一種以人類可讀的文字形式表達半結構化資料的約定。S-表示式可能以其在Lisp家族的程式語言中的使用而為人所知。其他應用則見於由Lisp衍生的語言,如DSSSL,以及如IMAP之類通訊協議中作為標記出現和約翰·麥卡錫的CBCL。語法細節和所支援的資料型別雖因語言而異,但這些語言間最通用的特性則是使用S-表示式作為括號化的字首表示法(有時亦作劍橋波蘭表示法)。