タグ

Javascriptとparserに関するwebmarksjpのブックマーク (3)

  • JavaScript で構文解析: Days on the Moon

    C++ の特徴のひとつである演算子オーバーロード、その粋を極めたのが Boost Lambda (無名関数) と Boost Spirit (構文解析) ではないかと思っています。JavaScript では無名関数が使えるので Lambda に関しては間に合っているとも言えますが、Spirit はそうも行きません。JavaScript 2 で演算子オーバーロードがサポートされるのならチャレンジしてみようかななどと思ってそれきりになっていました。 しかし、一部でパーサブームが起こっているというのを受け、Perl 6 Rules をつらつらと眺めているうち、正規表現のメタ文字を使えば文法定義をきれいに書けるのではと思い至りました。そこで実際に JavaScript でパーサジェネレータを作り、Spirit にあやかって Gin (ジン) と名づけてみました。 文法定義 正規表現リテラルを使うこ

  • 10分で書く構文解析器 - Scala で TAPLを勉強しつつ LLVM コンパイラを作る日記

    10分で書く構文解析器をやってみました。 再帰下降法を使っています。 四則演算して結果を返します。 最初に、簡単なスタックのように使える文字読み込み関数pop(),push(),peek()をつくり、 その関数を利用して、再帰下降構文解析の関数expr,term,factを作成しています。 字句解析は、pop()とfact()関数内でやってる感じです。 時間が余った分、空白の処理を入れています。 htmlはありものを使ってるので、実質、作ってる時間は5,6分です。 ムービー http://sakurai.s59.xrea.com/10min/10minparse.html できあがったもの http://sakurai.s59.xrea.com/10min/parse.html 詳しいところは、id:tanakhさんの 10分で書ける、お手軽パーザーを見てください。 http://fxp.

    10分で書く構文解析器 - Scala で TAPLを勉強しつつ LLVM コンパイラを作る日記
  • IT戦記 - JavaScript で数式パーサを書いてみた。

    背景 いままで、ちゃんとパーサというものを書いたことがなかったので勉強のためにアレコレ考えながらやってみようと思って、簡単な数式を木にするパーサを書いてみようと思ったのです>< 今回作るパーサの仕様 パースする数式の演算子は二項演算子 + - * / と単項演算子 + - だけ。 括弧とかは使わない。 演算の優先順位は * / のほうが + - より高い。つまり、 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(/^[^\

    IT戦記 - JavaScript で数式パーサを書いてみた。
  • 1