faster version of the lisp parser
//Parser Tokenizer for lisp dialects
//creates deep list with JSON parser
var ParseLisp = function(code){
if(code[0] !== "(" || code[code.length-1] !== ")" ) throw "Paren Error";
var tokens = code.match(/\"[^"]*\"|\(|\)|[^ ()]+/g);
for(var i=0;i<tokens.length;i++){
switch(tokens[i]){
case "(":
tokens[i] = "[";
break;
case ")":
if(tokens[i+1] !== ")") tokens[i] = "],";
else tokens[i] = "]";
break;
default:
if(tokens[i+1] === ")") tokens[i] = '"' + tokens[i] + '"';
else tokens[i] = '"' + tokens[i] + '",';
}
}
return JSON.parse(tokens.join("").slice(0, -1));
};
console.time("foo");
for(var i=0;i<10000;i++) ParseLisp("(func x (args f o d) (+ 3 4 5 f o d) (list 4 3 2 (2)))");
console.timeEnd("foo");