短いオフサイドルールなパーサ字句解析器

HaskellPythonオフサイドルールのパーサレキサーjavascriptで書いてみました。
例はわざとレアなケースで書いてあります。

<script>
Array.prototype.toString = function() { return "[" + this.join(",") + "]" }
function run() {
	var ls = (document.getElementById("in").value+"\n").split(/\n/)
	var ts = [], ns = [-1,-1,0]
	for(var i = 0; i < ls.length; i++) {
		var m = ls[i].match(/(^\s*)(.*)/), n = m[1].length
		if (n > ns[ns.length-1]) ts.push("("),ns.push(n)
		else while (n < ns[ns.length - 1] && n <= ns[ns.length - 2])
			ns.pop(),ts.push(")")
		if (m[2].length!=0) ts = ts.concat(m[2].split(/\s/))
	}
	alert(ts)
}
</script>
<textarea rows="15" cols="80" id="in">
  a
    b c d e
a
 b
    c d e
  d
</textarea>
<input type="button" onclick="run()"/>

htmlとして保存してブラウザで開くと以下のように出力されます。

[(,a,(,b,c,d,e,),),a,(,b,(,c,d,e,d,),)]

追記:

よく考えたら、パーサじゃなくて、字句解析器だった。
いろいろ書き換え。