Insert standard_grammar into the standard scope via recursion, allowing it to be used in sub-languages
This commit is contained in:
@@ -136,14 +136,14 @@
|
|||||||
provide
|
provide
|
||||||
print_through
|
print_through
|
||||||
)
|
)
|
||||||
insert_into_scope_let (lambda (scope_let name item) (array (idx scope_let 0) (concat (idx scope_let 1) (array name item))))
|
insert_into_scope_let (lambda (scope_let name item) (array (idx scope_let 0) (concat (idx scope_let 1) (array name (array quote item)))))
|
||||||
; Gotta insert with_import into scope_let via vY combinator so it can use itself
|
; Gotta insert with_import into scope_let via vY combinator so it can use itself
|
||||||
with_import (vY (lambda (recurse) (vau de (lib_path code)
|
with_import (vY (lambda (recurse) (vau de (lib_path code)
|
||||||
(let (imported_scope_let (eval (concat (insert_into_scope_let scope_let_sans_import (quote with_import) recurse)
|
(let (imported_scope_let (eval (concat (insert_into_scope_let scope_let_sans_import (quote with_import) recurse)
|
||||||
(array (read-string (slurp (eval lib_path de))))) root_env))
|
(array (read-string (slurp (eval lib_path de))))) root_env))
|
||||||
(eval (concat imported_scope_let (array code)) de)))))
|
(eval (concat imported_scope_let (array code)) de)))))
|
||||||
scope_let (insert_into_scope_let scope_let_sans_import (quote with_import) with_import)
|
scope_let (insert_into_scope_let scope_let_sans_import (quote with_import) with_import)
|
||||||
standard_grammar (array
|
gen_standard_grammar (rec-lambda () (array
|
||||||
(array (quote WS) (array "( | |
|
(array (quote WS) (array "( | |
|
||||||
|(;[ -~]*
|
|(;[ -~]*
|
||||||
))+") (lambda (x) nil))
|
))+") (lambda (x) nil))
|
||||||
@@ -165,8 +165,13 @@
|
|||||||
(array (quote form) (array "~" (quote WS) * (quote form)) (lambda (_ _ x) (array (quote unquote) x)))
|
(array (quote form) (array "~" (quote WS) * (quote form)) (lambda (_ _ x) (array (quote unquote) x)))
|
||||||
(array (quote form) (array "," (quote WS) * (quote form)) (lambda (_ _ x) (array (quote splice-unquote) x)))
|
(array (quote form) (array "," (quote WS) * (quote form)) (lambda (_ _ x) (array (quote splice-unquote) x)))
|
||||||
(array (quote start_symbol) (array (quote WS) * (quote form) (quote WS) *) (lambda (_ f _) f))
|
(array (quote start_symbol) (array (quote WS) * (quote form) (quote WS) *) (lambda (_ f _) f))
|
||||||
(array (quote start_symbol) (array (quote WS) * "#lang" (quote WS) * (quote form) "[ -~]*") (lambda (_ _ _ gram source) (read-string source (eval (concat scope_let (array gram)) root_env) (quote start_symbol))))
|
(array (quote start_symbol) (array (quote WS) * "#lang" (quote WS) * (quote form) "[ -~]*")
|
||||||
)
|
(lambda (_ _ _ gram source) (read-string source
|
||||||
|
(eval (concat (insert_into_scope_let scope_let (quote standard_grammar) (recurse)) (array gram)) root_env)
|
||||||
|
(quote start_symbol))))
|
||||||
|
))
|
||||||
|
standard_grammar (gen_standard_grammar)
|
||||||
|
scope_let (insert_into_scope_let scope_let (quote standard_grammar) standard_grammar)
|
||||||
|
|
||||||
rep (vY (lambda (recurse) (wrap (vau de () (do (println (eval (read-string (get_line "> ") standard_grammar (quote start_symbol)) de))
|
rep (vY (lambda (recurse) (wrap (vau de () (do (println (eval (read-string (get_line "> ") standard_grammar (quote start_symbol)) de))
|
||||||
(eval (array recurse) de))))))
|
(eval (array recurse) de))))))
|
||||||
|
|||||||
Reference in New Issue
Block a user