From 55aab5b3f5ee9ff5dbe2862ee498d53f578f35d6 Mon Sep 17 00:00:00 2001 From: Wesley Kerfoot Date: Fri, 6 Dec 2013 22:35:43 -0500 Subject: [PATCH] fixed some bugs related to list parsing --- parse.js | 21 +++++++++++++++++---- test.jl | 11 ++++++++--- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/parse.js b/parse.js index 58a824c..0bb4436 100755 --- a/parse.js +++ b/parse.js @@ -44,6 +44,7 @@ function parseMany(exprType, valid, tokens) { } else { console.log("Error: unexpected token "+fst(tokens)); + console.log("in parseMany," + ", " + tokens); return; } results.push(parsed); @@ -91,7 +92,14 @@ function parseBetween(exprType, between, tokens) { } function parseList(tokens) { - var xs = parseBetween(function (x) { return true; }, "comma", tokens); + if (fst(tokens)[0] === "right_square") + var xs = []; + else if (fst(tokens)[0] === "comma") { + tokens.pop(); + var xs = []; + } + else + var xs = parseBetween(function (x) { return true; }, "comma", tokens); if (fst(tokens)[0] !== "right_square") { console.log("Error, list must be terminated by ]"); return undefined; @@ -107,7 +115,12 @@ function parseDefFunction(tokens) { console.log("Error, expected an identifier in function definition"); return undefined; } - var parameters = parseMany(validName, validFormPar, tokens); + if (fst(tokens)[0] === "right_paren") { + var parameters = []; + } + else { + var parameters = parseMany(validName, validFormPar, tokens); + } if ((fst(tokens)[0]) !== "right_paren") { console.log("Error, formal parameters must be followed by )"); return undefined; @@ -333,9 +346,9 @@ function pprintDef(def) { function pprintIf(ifexp) { if (ifexp.elseexp) - return "if " + pprint(ifexp.condition) + " then " + pprint(ifexp.thenexp) + " else " + pprint(ifexp.elseexp); + return "(if " + pprint(ifexp.condition) + " then " + pprint(ifexp.thenexp) + " else " + pprint(ifexp.elseexp) + ")"; else - return "if " + pprint(ifexp.condition) + " then " + pprint(ifexp.thenexp); + return "(if " + pprint(ifexp.condition) + " then " + pprint(ifexp.thenexp) + ")"; } function pprint(expr) { diff --git a/test.jl b/test.jl index 675dd2c..ad828af 100644 --- a/test.jl +++ b/test.jl @@ -17,8 +17,13 @@ def (mymap f xs) (: (f (head xs)) (mymap f (tail xs))) +def empty [] + +def getFile + (readFile "./parse.js") + def main - if (2 < 3) + if False then - (print (mymap add [1,2,3,4 , 5])) - else (print "") + undefined + else getFile