diff --git a/example.jl b/example.jl index 32fe00a..f211604 100644 --- a/example.jl +++ b/example.jl @@ -3,6 +3,9 @@ defop 2 Left (a ++ b) deftype Foo (A -> B) +;; here is a comment +; here is another comment + deftype (Foo a b) (a -> b) diff --git a/prelude.jl b/prelude.jl new file mode 100644 index 0000000..bd1a296 --- /dev/null +++ b/prelude.jl @@ -0,0 +1,9 @@ +;; This file declares the various types used by intrinsic/prelude definitions +;; It is sort of special in that it doesn't care whether there are any associated definitions +;; just that there are type definitions for that particular binding's name + +deftype String (List Char) + +deftype (List a) + (Empty | + (Cons a (List a))) diff --git a/representation.js b/representation.js index 2b83669..9db580d 100644 --- a/representation.js +++ b/representation.js @@ -391,7 +391,8 @@ OPInfo = {"+" : [3, "Left"], "<$>" : [1, "Left"], "." : [1, "Left"], "," : [1, "Left"], - "->" : [1, "Right"]}; + "->" : [1, "Right"], + "|" : [1, "Left"]}; module.exports = { diff --git a/tokenize.js b/tokenize.js index 56de382..907622e 100755 --- a/tokenize.js +++ b/tokenize.js @@ -178,15 +178,21 @@ function peek(tokstream, toktype, word, charnum, linenum) { return false; } + function tokenize(tokstream, matchop) { var tokens = []; var charnum = 1; var linenum = 1; - var i, result, lambda, num; + var i, result, lambda, num, comment; while (tokstream) { switch (tokstream[0].charCodeAt()) { /* falls through */ + case 59: // ; + while (tokstream[0].charCodeAt() !== 10) { + tokstream = tokstream.substr(1); + } + break; case 9: // '\t' charnum++; tokens.push(["whitespace", '\t', charnum, linenum]); @@ -216,6 +222,7 @@ function tokenize(tokstream, matchop) { charnum++; tokens.push(["left_paren", '(', charnum, linenum]); tokstream = tokstream.substr(1); + break; /* falls through */ case 41: // ')'