jweinst1
12/21/2016 - 11:42 PM

faster version of the lisp parser

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");