Merge branch 'master' of git://factorcode.org/git/jamesnvc
						commit
						1a835ba2da
					
				|  | @ -26,14 +26,14 @@ DEFER: funcall | |||
|   unclip convert-form swap convert-body [ , % funcall ] bake ; | ||||
|    | ||||
| <PRIVATE   | ||||
| : localize-body ( vars body -- newbody )   | ||||
|   [ dup lisp-symbol? [ tuck name>> swap member? [ name>> make-local ] [ ] if ] | ||||
|                      [ dup s-exp? [ body>> localize-body <s-exp> ] [ nip ] if ] if | ||||
|                    ] with map ; | ||||
| : localize-body ( assoc body -- assoc newbody )   | ||||
|   [ dup lisp-symbol? [ over dupd [ name>> ] dip at swap or ] | ||||
|                      [ dup s-exp? [ body>> localize-body <s-exp> ] when ] if | ||||
|                    ] map ; | ||||
|    | ||||
| : localize-lambda ( body vars -- newbody newvars ) | ||||
|   dup make-locals dup push-locals [ swap localize-body <s-exp> convert-form ] dipd | ||||
|   pop-locals swap ; | ||||
|   make-locals dup push-locals swap | ||||
|   [ swap localize-body <s-exp> convert-form swap pop-locals ] dip swap ; | ||||
|    | ||||
| PRIVATE> | ||||
|                     | ||||
|  |  | |||
|  | @ -8,6 +8,14 @@ IN: lisp.parser.tests | |||
|   "1234" "atom" \ lisp-expr rule parse parse-result-ast | ||||
| ] unit-test | ||||
| 
 | ||||
| { -42  }  [ | ||||
|   "-42" "atom" \ lisp-expr rule parse parse-result-ast | ||||
| ] unit-test | ||||
| 
 | ||||
| { 37/52 } [ | ||||
|   "37/52" "atom" \ lisp-expr rule parse parse-result-ast | ||||
| ] unit-test | ||||
| 
 | ||||
| { 123.98 } [ | ||||
|   "123.98" "atom" \ lisp-expr rule parse parse-result-ast | ||||
| ] unit-test | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| ! Copyright (C) 2008 James Cash | ||||
| ! See http://factorcode.org/license.txt for BSD license. | ||||
| USING: kernel peg.ebnf peg.expr math.parser sequences arrays strings | ||||
| combinators.lib ; | ||||
| combinators.lib math ; | ||||
| 
 | ||||
| IN: lisp.parser | ||||
| 
 | ||||
|  | @ -18,9 +18,11 @@ RPAREN       = ")" | |||
| dquote       = '"' | ||||
| squote       = "'" | ||||
| digit        = [0-9] | ||||
| integer      = (digit)+                            => [[ string>number ]] | ||||
| float        = (digit)+ "." (digit)*               => [[ first3 >string [ >string ] dipd 3append string>number ]] | ||||
| integer      = ("-")? (digit)+                           => [[ first2 append string>number ]] | ||||
| float        = integer "." (digit)*                      => [[ first3 >string [ number>string ] dipd 3append string>number ]] | ||||
| rational     = integer "/" (digit)+                      => [[ first3 nip string>number / ]] | ||||
| number       = float | ||||
|               | rational | ||||
|               | integer | ||||
| id-specials  = "!" | "$" | "%" | "&" | "*" | "/" | ":" | "<" | ||||
|               | " =" | ">" | "?" | "^" | "_" | "~" | "+" | "-" | "." | "@" | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue