今使ってる、字句解析器

今使ってる字句解析器です。javascriptです。
あとでコメントとかちゃんと考えないとなぁ。

	var buffer, line, LPAR=4, RPAR=5;
	var yylexa = [
		new RegExp("^[\\n]"), function(){line++;},
		new RegExp("^[ \\t]+"), function(){},
		new RegExp("^[A-Za-z_]([A-Za-z]|[0-9])*"), function(){return "ID";},
		new RegExp("^(\\\"([^\\\\\\\"]|(\\\\[\\x00-\\xff]))*\\\")"), function(){return "STRING";},
		new RegExp("^([\\!\\%\\&\\*\\+\\-\\/\\:\\<\\=\\>\\?\\@\\^~]+|[\\.\\,\\;])"), function(){return "ID";},
		new RegExp("^([0-9]+(\\.[0-9]+)|([0-9])+)"), function(){return "NUMBER";},
		new RegExp("^(\\(|\\{|\\[)"), function(){return LPAR;},
		new RegExp("^(\\)|\\}|\\])"), function(){return RPAR;}];

	var yylex = function() {
		for(var i = 0; i < yylexa.length; i += 2){
			var r=yylexa[i],m=buffer.match(r);
			if(m!=null&&m.length>0&&m[0].length>0){
				token=m[0];
				buffer=buffer.substring(m[0].length, buffer.length);
				r=yylexa[i+1]();
				if(r!=null)return r;
				i=-2;
				continue;
			}
		}
		return (buffer.length == 0) ? 0 : -1;
	};

new RegExpつかわないで、/^(\|\{|\[)/とか書いたほうが普通にjavascript使う分には
いいです。もしかすると{/^(\|\{|\[)/: function(){return LPAR;}}とかと連想配列
にしておくと、いいのかもしれない。