S-kifejezés

Az S-kifejezés vagy szex kifejezés (a "Symbolic expression" [1] rövidítése  – angol  szimbolikus kifejezés ) arra a megállapodásra utal, hogy hogyan írjunk félig strukturált adatokat ember által olvasható szöveges formában. A szimbolikus kifejezések elsősorban szimbólumokból és listákból épülnek fel. Az S-kifejezések leginkább a Lisp programozási nyelvcsaládban való használatukról ismertek . Az S-kifejezéseket a Lisp-eredetű nyelvekben, például a DSSSL - ben, és a jelöléseket olyan kommunikációs protokollokban is használják, mint a John McCarthy-féle IMAP és CBCL. . A szintaxis és a támogatott adattípusok részletei nyelvenként eltérőek, de közös jellemző az S-kifejezések előtagként történő használata zárójelben (Cambridge lengyel jelölésként ismert ).

Az S-kifejezéseket a Lisp mind a kódhoz, mind az adatokhoz használja (lásd McCarthy "Rekurzív szimbolikus kifejezési függvények" ). Az S-kifejezések eredetileg csak az M-kifejezések által manipulálandó adatok megjelenítésére szolgáltak , de a Lisp első implementációja egy S-kifejezés értelmező volt , amelybe az M-kifejezéseket is le akarták fordítani, és a Lisp programozók hamar hozzászoktak az S használatához. -kifejezések adatként. , és a kódhoz.

Az S-kifejezések lehetnek egyedi objektumok (atomok), például számok, szimbólumok (Lisp) , beleértve a speciális karaktereket nilés ta vagy pontpárokat a formában (x . y). A beágyazott pontpárok hosszabb listái, például (1 . (2 . (3 . nil))), a megszokottabb módon írhatók, mint (1 2 3). A beágyazott listák S-kifejezésként is írhatók: ((молоко сок) (мёд мармелад)). Az S-kifejezések függetlenek a szóközöktől és a sortörésektől, a szóközök csak az atomok közötti határolók.

Példa: egyszerű nyelvtan S-kifejezés formájában [2] :

(( S ) ( NP ) ( VP )) ( ( VP ) ( V )) ( ( VP ) ( V ) ( NP )) ( ( V ) meghalt ) ( ( V ) alkalmazott ) ( ( NP ) nővérek ) ( ( NP ) betegek ) ( ( NP ) Medicenter ) ( ( NP ) Dr Chan ))

A programkód S-kifejezésként is írható (általában előtag jelöléssel). Egy kis szintaktikai cukor a Lisp programok írásához, hogy egy gyakran használt kifejezést (quote x)le lehet rövidíteni'x

Gyakori Lisp példa :

( defun faktoriális ( x ) ( if ( nulla x ) 1 ( * x ( faktoriális ( - x 1 )))))

Példa a sémára :

( define ( faktoriális x ) ( if ( nulla? x ) 1 ( * x ( faktoriális ( - x 1 )))))

A Lisp S-kifejezéseit a READ funkcióval olvassuk be. Ez a függvény beolvassa az S-kifejezés szöveges reprezentációját, és visszaadja a Lisp adatokat. A PRINT funkcióval S-kifejezés nyomtatható. A READ függvény segítségével kiolvasható, hogy milyen PRINT tér vissza, feltéve, hogy minden kimeneti adatobjektum rendelkezik I/O reprezentációval. A Lisp rendelkezik ezzel a számokkal, karakterláncokkal, karakterekkel, listákkal és sok más adattípussal. A programkód a PPRINT funkció segítségével szépen formázott (szépen nyomtatott) S-kifejezésként ábrázolható.

A Lisp programok érvényes S-kifejezések, de nem minden S-kifejezés érvényes Lisp program. (1.0 + 3.1) érvényes S-kifejezés, de nem érvényes Lisp program, a Lisp előtag jelölést használ, így a lebegőpontos szám (1.0) nem ismerhető fel műveletként (a kifejezés első eleme).

Szabványosítás

1997 májusában Ronald Rivest javasolta az Internet Draftot 3] új RFC - hez A projekt a Lisp S-kifejezésein alapuló szintaxist definiált, de programozás helyett általános célú adattárolásra és XML -hez hasonló adatcserére szolgál. Soha nem hagyták jóvá RFC-ként, de azóta más RFC-k (pl . RFC 2693 ) és számos más publikáció is hivatkozott rá, és használták. [4] Eredetileg az SPKI -ben való használatra szánták .

A Rivest formátum egy S-kifejezést vagy oktett-karakterláncként ( bájtok sorozata ) vagy más S-kifejezések véges listájaként határoz meg. Három csereformátumot ír le az ilyen szerkezetű kifejezésekhez. Ezek egyike, az "Advanced transport" formázási szempontból meglehetősen rugalmas, szintaktikailag hasonló a Lisp-stílusú kifejezésekhez, de nem azonos. A kiterjesztett transzportábrázolás például lehetővé teszi az oktett karakterláncok szó szerinti ábrázolását (a karakterlánc hossza, majd kettőspont, és a teljes karakterlánc "ahogy van"), ami elkerüli a karaktereket, a hexadecimális vagy base64 -es ábrázolást, egy oktett karakterlánc lehet közvetlenül „tokenként” kell elhelyezni, ha megfelel bizonyos feltételeknek. A Rivest tokenek abban különböznek a Lisp tokenektől, hogy pusztán a kényelem és az esztétika miatt léteznek, és ugyanúgy kezelik őket, mint a többi karakterláncot, nem pedig konkrét szintaktikai jelentésük van. Egy másik csereformátum, amelynek célja, hogy kompaktabb, könnyebben értelmezhető, és minden absztrakt S-kifejezésre egyedi legyen, a "kanonikus jelölés", amely csak szó szerinti karakterláncokat engedélyez, és nem engedélyezi a szóközt a karakterláncokon kívüli formázási elemként. Végül ott van az "alaptranszport-reprezentáció", amely vagy a kanonikus forma, vagy ugyanazok a Base64 kódolású elemek, zárójelekkel körülvéve , ez utóbbi biztonságos átvitelként szolgál a kanonikus kódolású S-kifejezésekhez egy olyan rendszerben, amely lehetővé teszi a szóköz módosítását (pl. egy levelezőrendszer, amely 80 sornyi sorral fedi át valami hosszabbat).

Ezt a formátumot nem alkalmazták széles körben az SPKI-n kívüli használatra. Rivest az S-kifejezések weboldalán biztosítja a C forráskódot egy elemzőhöz és generátorhoz, amely elméletileg más programokban is használható, bár ezeknek a programoknak a licence nem világos. Ennek a formátumnak a független megvalósítására azonban nincs korlátozás. Ingyenes megvalósítás megtalálható a sexpr.sf.net és a leon.bottou.org/projects/minilisp címen .

Lásd még

Jegyzetek

  1. McCarthy, 1960 .
  2. Gazdar / MelisH, Natural Language Processing in Lisp
  3. Archivált másolat (a hivatkozás nem elérhető) . Letöltve: 2010. február 5. Az eredetiből archiválva : 2008. december 1.. 
  4. rivest szex - Google Scholar

Irodalom