やっと分かった 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] } 無限ループしない
21日(米国時間)、Java Mozilla Html Parserの最新版となるJava Mozilla Html Parser 0.2.0が公開された。Java Mozilla Html ParserはHTMLデータをパースしてJavaドキュメントオブジェクトに変換するためのパッケージ。Mozillaで採用されているHTML Parserに対するラッパパッケージになっており、Webブラウザと同じクオリティレベルでのパースが可能という特徴がある。 0.2.0はパフォーマンスの改善が実施されているほか、エンコーディング関連のバグが修正されている。Java Mozilla Html ParserはもともとDapperにおける開発の一部として取り組まれたもの。ラッパライブラリでありすべてJavaで開発されたわけではないのでビルドやデプロイは若干手間だが、WindowsやLinux、Mac OS
背景 いままで、ちゃんとパーサというものを書いたことがなかったので勉強のためにアレコレ考えながらやってみようと思って、簡単な数式を木にするパーサを書いてみようと思ったのです>< 今回作るパーサの仕様 パースする数式の演算子は二項演算子 + - * / と単項演算子 + - だけ。 括弧とかは使わない。 演算の優先順位は * / のほうが + - より高い。つまり、 1 + 1 * 1 は 1 + (1 * 1) 単項演算子は二項演算子より優先順位が高い。つまり、 - 1 + 1 は (-1) + 1 で、作ってみた! ソースコード filter 関数とか使ってるので、 Firefox only です。 var parse = function(source) { var tokens = source.match(/[-+*/]|[^-+*/\s]+|\s+/g).filter(/^[^\
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く