やっと分かった
parse("1+1+1", i); function parse(expr, i) { var left = parse(expr, i); if (expr[i++] !== '+') return 1; if (expr[i++] !== '1') throw Error; return [left, 1] }
そりゃ無限ループになるわなあ。
手書きパーサなら演算子順位法を使うからいいけど
ちなみに
右再帰だとこう
parse("1+1+1", i); function parse(expr, i) { if (expr[i++] !== '1') throw Error; if (expr[i++] !== '+') return 1; var right = parse(expr, i); return [1, right] }
無限ループしない