S-Ausdruck

In der Computerwissenschaft sind S-Ausdrücke, sexprs oder sexps (für den "symbolischen Ausdruck") eine Notation für die verschachtelte Liste (baumstrukturierte) Daten, die dafür erfunden sind und durch das Programmiersprache-Lispeln verbreitet sind, das sie für den Quellcode sowie die Daten verwendet. In der üblichen parenthesized Syntax des Lispelns wird ein S-Ausdruck induktiv als klassisch definiert

  1. ein Atom oder
  2. ein Ausdruck der Form, wo x und y S-Ausdrücke sind.

Das zweite, rekursive, ein Teil der Definition vertritt ein befohlenes Paar, so dass s-exprs effektiv binäre Bäume sind.

Die Definition eines Atoms ändert sich pro Zusammenhang; in der ursprünglichen Definition von John McCarthy wurde es angenommen, dass dort "ein unendlicher Satz von unterscheidbaren Atomsymbolen" vertreten als "Reihen von lateinischen Kapitalbriefen und Ziffern mit einzelnen eingebetteten Formblättern" (d. h., Charakter-Schnur und numerische Druckfehler) bestanden hat. Die meisten modernen sexpr Notationen verwenden außerdem eine abgekürzte Notation, um Listen in S-Ausdrücken, so dass zu vertreten

:

tritt für ein

:

wo das spezielle Symbol des Endes der Liste (geschrieben im Schema) ist.

In der Lispeln-Familie von Programmiersprachen werden S-Ausdrücke verwendet, um sowohl Quellcode als auch Daten zu vertreten. Anderer Gebrauch von S-Ausdrücken ist auf Lispeln-abgeleiteten Sprachen wie DSSSL, und als Preiserhöhung in Kommunikationsprotokollen wie IMAP und der CBCL von John McCarthy. Die Details der Syntax und unterstützten Datentypen ändern sich auf den verschiedenen Sprachen, aber der grösste Teil des gemeinsamen Merkmals unter diesen Sprachen ist der Gebrauch von S-Ausdrücken und Präfix-Notation.

Verwenden Sie im Lispeln

Wenn

es Quellcode im Lispeln vertritt, ist das erste Element eines S-Ausdrucks allgemein ein Maschinenbediener oder Funktionsname, und irgendwelche restlichen Elemente werden als Argumente behandelt. Das wird "Präfix-Notation" oder "polnische Notation von Cambridge" genannt. Als ein Beispiel wird der in C geschriebene Ausdruck von Boolean als in der s-expr-based Präfix-Notation des Lispelns vertreten.

Wie bemerkt, oben ändert sich die genaue Definition "des Atoms" über LISP ähnliche Sprachen. Eine angesetzte Schnur kann normalerweise irgendetwas außer einem Zitat, während enthalten

ein nicht zitiertes Bezeichner-Atom kann normalerweise irgendetwas außer dem Zitat, whitespace Charaktere, Parenthese, Klammern, geschweifte Klammern, umgekehrter Schrägstrich und Strichpunkt enthalten. In jedem Fall kann ein verbotener Charakter normalerweise durch das Entgehen ihm mit einem vorhergehenden umgekehrten Schrägstrich eingeschlossen werden. Unterstützung von Unicode ändert sich.

Der rekursive Fall der s-expr Definition wird damit traditionell durchgeführt lernt Zellen.

S-Ausdrücke waren nur für Daten ursprünglich beabsichtigt, die durch die M Ausdrücke zu manipulieren sind, aber die erste Durchführung des Lispelns war ein Dolmetscher des S-Ausdrucks encodings von der M Ausdrücke, und Lispeln-Programmierer sind bald zum Verwenden von S-Ausdrücken sowohl für den Code als auch für die Daten gewöhnt geworden.

Das bedeutet, dass Lispeln homoiconic ist, d. h. ist die primäre Darstellung von Programmen auch eine Datenstruktur in einem primitiven Typ der Sprache selbst.

Beispiele von DatenS-Ausdrücken

Verschachtelte Listen können als S-Ausdrücke geschrieben werden: Ist ein Zwei-Elemente-S-Ausdruck, dessen Elemente auch Zwei-Elemente-S-Ausdrücke sind. Die gewhitespace-trennte Notation, die im Lispeln (und dieser Artikel) verwendet ist, ist typisch. Linienbrechungen (Zeilenvorschubzeichen) qualifizieren sich gewöhnlich als Separatoren.

Das ist eine einfache Grammatik ohne Zusammenhänge für eine winzige Teilmenge von Englisch schriftlich als ein S-Ausdruck (Gazdar/Melish, Verarbeitung der natürlichen Sprache im Lispeln):

(((S) (NP VP))

((VP) (V))

((VP) (V NP))

((V) ist gestorben)

((V) verwendet)

((NP) Krankenschwestern)

((NP) Patienten)

((NP) Medicenter)

((NP) "Dr Chan"))

</Quelle>

Das Beispiel der Quelle codiert S-Ausdrücke

Programm-Code kann in S-Ausdrücken gewöhnlich mit der Präfix-Notation geschrieben werden.

Beispiel im allgemeinen Lispeln:

(defun factorial (x)

(wenn (zerop x)

1

(* x (factorial (-x 1)))))

</Quelle>

S-Ausdrücke können im Lispeln mit der GELESENEN Funktion gelesen werden. LESEN SIE liest die Textdarstellung eines S-Ausdrucks und gibt Lispeln-Daten zurück. Der Funktions-DRUCK kann an die Produktion ein S-Ausdruck gewöhnt sein. Die Produktion kann dann mit der GELESENEN Funktion gelesen werden, wenn alle gedruckten Datengegenstände eine lesbare Darstellung haben. Lispeln hat lesbare Darstellungen für Zahlen, Schnuren, Symbole, Listen und viele andere Datentypen. Programm-Code kann als hübsche gedruckte S-Ausdrücke mit der Funktion PPRINT formatiert werden (Zeichen: mit zwei Ps, kurz für - Druck).

Lispeln-Programme sind gültige S-Ausdrücke, aber nicht alle S-Ausdrücke sind gültige Lispeln-Programme. ist ein gültiger S-Ausdruck, aber nicht ein gültiges Lispeln-Programm, da Lispeln Präfix-Notation verwendet und eine Schwimmpunkt-Zahl (hier 1.0) als eine Operation (das erste Element des Ausdrucks) nicht gültig ist.

Ein S-Ausdruck, der durch ein einzelnes Anführungszeichen, als darin vorangegangen ist, ist syntaktischer Zucker für einen angesetzten S-Ausdruck in diesem Fall.

Standardisierung

Standards für einige Lispeln-abgeleitete Programmiersprachen schließen eine Spezifizierung für ihre S-Ausdruck-Syntax ein. Diese schließen Allgemeines Lispeln (ANSI Standard-Unterlage ANSI INCITS 226-1994 (R2004)), Schema (R5RS und R6RS), und ISLISP ein.

Im Mai 1997 hat Ron Rivest einen Internetentwurf vorgelegt, der für die Veröffentlichung als ein RFC zu betrachten ist. Der Entwurf hat eine Syntax definiert, die auf Lispeln-S-Ausdrücken gestützt ist, aber hat für die Mehrzweckdatenlagerung und den Austausch (ähnlich XML) aber nicht spezifisch für die Programmierung bestimmt. Es wurde als ein RFC nie genehmigt, aber es ist seitdem zitiert und durch anderen RFCs verwendet worden (z.B. RFC 2693) und mehrere andere Veröffentlichungen. Es war für den Gebrauch in SPKI ursprünglich beabsichtigt.

Das Format von Rivest definiert einen S-Ausdruck als, irgendein eine Oktett-Schnur (eine Reihe von Bytes) oder eine begrenzte Liste anderer S-Ausdrücke zu sein. Es beschreibt drei Austausch-Formate, um diese Struktur auszudrücken. Man ist der "fortgeschrittene Transport", der in Bezug auf die Formatierung sehr flexibel ist, und mit dem Lispeln artigen Ausdrücken syntaktisch ähnlich ist, aber sie sind nicht identisch. Der fortgeschrittene Transport erlaubt zum Beispiel Oktett-Schnuren, wortwörtlich (die Länge der Schnur vertreten zu werden, die von einem Doppelpunkt und der kompletten rohen Schnur gefolgt ist), eine angesetzte Form, die Flucht-Charaktere, hexadecimal, Base64 erlaubt, oder direkt als ein "Jeton" gelegt, wenn es bestimmte Bedingungen entspricht. (Die Jetons von Rivest unterscheiden sich von Lispeln-Jetons darin der erstere ist gerade für die Bequemlichkeit und Ästhetik, und hat genau wie andere Schnuren behandelt, während die Letzteren spezifische syntaktische Bedeutung haben.) Ein anderes Austausch-Format, beabsichtigt, um kompakter, leichter zu sein, und einzigartig für jeden abstrakten S-Ausdruck grammatisch zu analysieren, ist die "kanonische Darstellung", die nur wortwörtliche Schnuren erlaubt, und whitespace als formatierend außerhalb Schnuren verbietet. Schließlich gibt es die "grundlegende Transportdarstellung", die entweder die kanonische Form oder dasselbe verschlüsselt als Base64 und umgeben durch geschweifte Klammern, die Letzteren ist, die beabsichtigt sind, um einen kanonisch verschlüsselten S-Ausdruck in einem System sicher zu transportieren, das Abstand ändern könnte (z.B ein E-Mail-System, das 80 Charakter breite Linien hat und irgendetwas Längeres wickelt als das).

Dieses Format ist an den Gebrauch außerhalb SPKI nicht weit angepasst worden. Die S-Ausdruck-Webseite von Rivest stellt C Quellcode für einen parser und Generator zur Verfügung (verfügbar laut der MIT-Lizenz, die angepasst und in andere Programme eingebettet werden konnte. Außerdem gibt es keine Beschränkungen des unabhängigen Einführens des Formats.

Siehe auch

  • M Ausdruck
  • Auto und cdr
  • lernt
  • Kanonische S-Ausdrücke
  • Der Vergleich der Datenanordnung formatiert

Links

Durchführungen der kostenlosen Software sind verfügbar:

  • sfsexp die kleine, schnelle S-Ausdruck-Bibliothek für C/C ++ auf Sourceforge
  • Minilispeln, durch Léon Bottou.
  • libcurie, ein kleiner libc Ersatz, der sich schwer auf S-Ausdrücke verlässt.

Putnam County, New York / Callitrichales
Impressum & Datenschutz