New kraken with import and #lang passed start symbol
This commit is contained in:
1
import_test.kp
Normal file
1
import_test.kp
Normal file
@@ -0,0 +1 @@
|
||||
(let (a 123) (provide a))
|
||||
@@ -1,7 +1,5 @@
|
||||
(let (
|
||||
|
||||
|
||||
|
||||
; First quick lookup function, since maps are not built in
|
||||
get-value-helper (rec-lambda recurse (dict key i) (if (>= i (len dict))
|
||||
nil
|
||||
@@ -29,9 +27,11 @@
|
||||
(if (> (len to_add) i)
|
||||
(cond (and is_do (= (len (idx to_add i)) 1)) (recurse true (concat current [(idx (idx to_add i) 0)]) to_add (+ i 1))
|
||||
(= (len (idx to_add i)) 1) (concat current [(recurse true [do (idx (idx to_add i) 0)] to_add (+ i 1))])
|
||||
(= (len (idx to_add i)) 3) (concat current [[with_import (idx (idx to_add i) 0) (recurse false [do] to_add (+ i 1))]])
|
||||
true (concat current [(recurse false [let [(idx (idx to_add i) 0) (idx (idx to_add i) 1)] ] to_add (+ i 1))]))
|
||||
current))
|
||||
|
||||
|
||||
; string interpolation
|
||||
remove_dollar (rec-lambda recurse (done to_do i j) (cond (>= j (- (len to_do) 2)) (str done (slice to_do i -1))
|
||||
(= "\\$" (slice to_do j (+ j 2))) (recurse (str done (slice to_do i j) "$") to_do (+ j 2) (+ j 2))
|
||||
@@ -63,18 +63,24 @@
|
||||
(array 'block_member [ "fun" 'WS 'atom 'WS * "\\(" 'call_innards "\\)" 'WS * 'form ]
|
||||
(lambda (_ _ name _ _ params _ _ body) `(~name (~lambda (,params) ~body))))
|
||||
|
||||
(array 'block_member [ 'form ] (lambda (x) [x]))
|
||||
(array 'block_member [ "let" 'WS * 'atom 'WS * "=" 'WS * 'form ]
|
||||
(lambda (_ _ name _ _ _ rhs) `(~name ~rhs)))
|
||||
; object syntax
|
||||
(array 'block_member ["obj" 'WS 'atom "\\(" ['WS * 'atom] * 'WS * "\\)" 'WS * "{" 'WS * ['atom 'WS * 'form 'WS *] * "}"]
|
||||
(lambda (_ _ name _ members _ _ _ _ _ methods _)
|
||||
[name (make_constructor name (map (lambda (x) (idx x 1)) members)
|
||||
(map (lambda (x) [(idx x 0) (idx x 2)]) methods))]))
|
||||
; import
|
||||
(array 'block_member [ "with_import" 'WS 'atom 'WS * ":" ]
|
||||
(lambda (_ _ file _ _) [file 0 0]))
|
||||
|
||||
(array 'block_member [ 'form ] (lambda (x) [x]))
|
||||
(array 'block_member [ "let" 'WS * 'atom 'WS * "=" 'WS * 'form ]
|
||||
(lambda (_ _ name _ _ _ rhs) `(~name ~rhs)))
|
||||
(array 'form ["{" 'WS * [ 'block_member 'WS ] * "}"]
|
||||
(lambda (_ _ inner _) (construct_body true [do] (map (lambda (x) (idx x 0)) inner) 0)))
|
||||
|
||||
(array 'new_kraken_start_symbol [ 'WS * [ 'block_member 'WS ] * ]
|
||||
(lambda (_ inner) (construct_body true [do] (map (lambda (x) (idx x 0)) inner) 0)))
|
||||
|
||||
|
||||
(array 'form [ "$\"" [ "(#|[%-[]| |[]-~]|(\\\\)|(\\n)|(\\t)|(\\*)|(\\\\$)|
|
||||
|[ -!]|(\\\\\"))*$" 'form ] * "(#|[%-[]| |[]-~]|(\\\\)|(\\n)|(\\t)|(\\*)|(\\\\$)|
|
||||
|
||||
@@ -1,38 +1,41 @@
|
||||
#lang (with_import "./new_kraken.kp" new_kraken_untyped)
|
||||
{
|
||||
let my_var = 1337
|
||||
(println $"this is string interpolation: $(+ 1 3 4) <- cool right? another $my_var yep even variables")
|
||||
#lang (with_import "./new_kraken.kp" new_kraken_untyped) new_kraken_start_symbol
|
||||
|
||||
obj Point( x y ) {
|
||||
add |self other| { Point((+ self.x other.x) (+ self.y other.y)) }
|
||||
sub |self other| { Point((- self.x other.x) (- self.y other.y)) }
|
||||
to_str |self| { str("x: " self.x ", y: " self.y) }
|
||||
}
|
||||
let my_var = 1337
|
||||
(println $"this is string interpolation: $(+ 1 3 4) <- cool right? another $my_var yep even variables")
|
||||
|
||||
fun say_hi(name) {
|
||||
println("hayo" name)
|
||||
}
|
||||
|
||||
fun test() {
|
||||
let plus_1 = |x| (+ x 1)
|
||||
let a = 1
|
||||
let b = plus_1(a)
|
||||
println("some" b)
|
||||
|
||||
say_hi("Marcus")
|
||||
|
||||
let p1 = Point(1 2)
|
||||
let p2 = Point(3 4)
|
||||
let p3 = p1.add(p2)
|
||||
let p4 = p1.sub(p2)
|
||||
say_hi("Charlie/Betty")
|
||||
|
||||
println("p1:" p1.to_str)
|
||||
println("p2:" p2.to_str)
|
||||
println("p3:" p3.to_str)
|
||||
println("p4:" p4.to_str)
|
||||
|
||||
(+ a b)
|
||||
}
|
||||
println("Test result is" test())
|
||||
obj Point( x y ) {
|
||||
add |self other| { Point((+ self.x other.x) (+ self.y other.y)) }
|
||||
sub |self other| { Point((- self.x other.x) (- self.y other.y)) }
|
||||
to_str |self| { str("x: " self.x ", y: " self.y) }
|
||||
}
|
||||
|
||||
fun say_hi(name) {
|
||||
println("hayo" name)
|
||||
}
|
||||
|
||||
fun test() {
|
||||
let plus_1 = |x| (+ x 1)
|
||||
let a = 1
|
||||
let b = plus_1(a)
|
||||
println("some" b)
|
||||
|
||||
say_hi("Marcus")
|
||||
|
||||
let p1 = Point(1 2)
|
||||
let p2 = Point(3 4)
|
||||
let p3 = p1.add(p2)
|
||||
let p4 = p1.sub(p2)
|
||||
say_hi("Charlie/Betty")
|
||||
|
||||
println("p1:" p1.to_str)
|
||||
println("p2:" p2.to_str)
|
||||
println("p3:" p3.to_str)
|
||||
println("p4:" p4.to_str)
|
||||
|
||||
println("before + a b" (+ a b))
|
||||
(with_import "./import_test.kp" (println "after + a b" (+ a b)))
|
||||
println("post after + a b" (+ a b))
|
||||
with_import "./import_test.kp":
|
||||
println("post new impot after + a b" (+ a b))
|
||||
}
|
||||
println("Test result is" test())
|
||||
|
||||
@@ -179,15 +179,15 @@
|
||||
(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 start_symbol) (array (quote WS) * (quote form) (quote WS) *) (lambda (_ f _) f))
|
||||
(array (quote start_symbol) (array (quote WS) * "#lang" (quote WS) * (quote form) "([ -~]|
|
||||
(array (quote start_symbol) (array (quote WS) * "#lang" (quote WS) (quote form) (quote WS) (quote form) "([ -~]|
|
||||
)*")
|
||||
(lambda (_ _ _ gram source) (do (println "gonna do that # yo") (read-string source
|
||||
(lambda (_ _ _ gram _ symbol source) (do (println "gonna do that # yo") (read-string source
|
||||
(eval (concat
|
||||
(insert_into_scope_let
|
||||
(insert_into_scope_let scope_let_sans_import_gram (quote standard_grammar) (gen_standard_grammar))
|
||||
(quote with_import) with_import)
|
||||
(array gram)) root_env)
|
||||
(quote start_symbol)))))
|
||||
symbol))))
|
||||
))
|
||||
)
|
||||
(insert_into_scope_let
|
||||
|
||||
Reference in New Issue
Block a user