var exports = module.exports  = {};

var read_str = function(str) {
    var tokens = tokenizer(str);
    var reader = new Reader(tokens);
    read_form(reader);
};

var tokenizer = function(str) {
    var token_re = /[\s,]*(~@|[\[\]{}()'`~^@]|"(?:\\.|[^\\"])*"|;.*|[^\s\[\]{}('"`,;)]*)/;
    return token_re.exec(str);
};

var tokenizer_tests = ['1', '(+ 1 2)', '(+ 2 (+ 2 3))'];
tokenizer_tests.map(function(e, i, c) {
    console.log(e, tokenizer(e));
});


var read_form = function() {

};

var Reader = function() {
    return {
        next: function() {

        },
        peek: function() {

        }

    };
};

exports.Reader = Reader;

@@ -26,24 +26,61 @@
 rts  = %7B%7D;%0A%0A
+// var PCRE = require('pcre').PCRE;%0A%0A
 var read_str
@@ -235,24 +235,28 @@
     var 
+re_
 token
-_re
+izer
  = /%5B%5Cs,
@@ -324,29 +324,79 @@
 %5D*)/
+g
 ;%0A    
-return 
+var match;%0A    var results = %5B%5D;%0A    while (match = re_
 token
-_re
+izer
 .exe
@@ -401,16 +401,79 @@
 xec(str)
+%5B1%5D) %7B%0A        results.push(match%5B0%5D);%0A    %7D%0A    return results
 ;%0A%7D;%0A%0Ava
@@ -586,16 +586,38 @@
 .log(e, 
+':%5Cn', JSON.stringify(
 tokenize
@@ -621,16 +621,17 @@
 izer(e))
+)
 ;%0A%7D);%0A%0A%0A
@@ -686,24 +686,30 @@
 unction(
+tokens
 ) %7B%0A    
 return %7B
@@ -704,30 +704,67 @@
     
-return %7B%0A       
+this.tokens = tokens;%0A    this.position = 0;%0A    var
  next
-:
+ =
  fun
@@ -777,33 +777,72 @@
 ) %7B%0A
-%0A        %7D,
+        position++;%0A        return peek();
 %0A    
+%7D;%0A
     
+var 
 peek
-:
+ =
  fun
@@ -851,25 +851,24 @@
 ion() %7B%0A
-%0A
         
 %7D%0A%0A    %7D
@@ -859,17 +859,100 @@
         
-%7D
+return tokens%5Bposition%5D;%0A    %7D;%0A%0A    return %7B%0A        next: next,%0A        peek: peek
 %0A%0A    %7D;

Collecting the results of the RegExp