From a6f25c55fc5e480bf82efef2d25bf4364b3ee076 Mon Sep 17 00:00:00 2001 From: James Cash Date: Sun, 27 Apr 2008 03:03:49 -0400 Subject: [PATCH] Changing back to use a tuple for the parsed s-expression --- extra/lisp/lisp.factor | 10 +++++----- extra/lisp/parser/parser.factor | 7 +++++-- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/extra/lisp/lisp.factor b/extra/lisp/lisp.factor index 729c136a95..e254c51b7b 100644 --- a/extra/lisp/lisp.factor +++ b/extra/lisp/lisp.factor @@ -7,7 +7,7 @@ IN: lisp DEFER: convert-form : convert-body ( s-exp -- quot ) - [ convert-form ] map [ ] [ compose ] reduce ; inline + [ convert-form ] map reverse [ ] [ compose ] reduce ; inline : convert-if ( s-exp -- quot ) 1 tail [ convert-form ] map reverse first3 [ % , , if ] bake ; @@ -18,17 +18,17 @@ DEFER: convert-form : convert-cond ( s-exp -- quot ) 1 tail [ [ convert-body map ] map ] [ % cond ] bake ; -: convert-general-form ( s-exp -- quot ) +: convert-general-form ( s-exp -- quot ) unclip swap convert-body [ % , ] bake ; > swap member? [ name>> make-local ] [ ] if ] - [ dup vector? [ localize-body ] [ nip ] if ] if ] with map ; inline + [ dup s-exp? [ body>> localize-body ] [ nip ] if ] if ] with map ; PRIVATE> : convert-lambda ( s-exp -- quot ) - 1 tail unclip reverse [ name>> ] map dup make-locals dup push-locals + first3 -rot nip [ body>> ] bi@ reverse [ name>> ] map dup make-locals dup push-locals [ swap localize-body convert-body ] dipd pop-locals swap ; : convert-list-form ( s-exp -- quot ) @@ -41,7 +41,7 @@ PRIVATE> } case ] [ drop convert-general-form ] if ; : convert-form ( lisp-form -- quot ) - { { [ dup vector? ] [ convert-list-form ] } + { { [ dup s-exp? ] [ body>> convert-list-form ] } [ [ , ] [ ] make ] } cond ; diff --git a/extra/lisp/parser/parser.factor b/extra/lisp/parser/parser.factor index 2375313a10..ec079265bc 100644 --- a/extra/lisp/parser/parser.factor +++ b/extra/lisp/parser/parser.factor @@ -6,6 +6,9 @@ IN: lisp.parser TUPLE: lisp-symbol name ; C: lisp-symbol +TUPLE: s-exp body ; +C: s-exp + EBNF: lisp-expr _ = (" " | "\t" | "\n")* LPAREN = "(" @@ -29,5 +32,5 @@ atom = number | identifier | string list-item = _ (atom|s-expression) _ => [[ second ]] -s-expression = LPAREN (list-item)* RPAREN => [[ second ]] -;EBNF +s-expression = LPAREN (list-item)* RPAREN => [[ second ]] +;EBNF \ No newline at end of file