読者です 読者をやめる 読者になる 読者になる

レガシーコード生産ガイド

私に教えられることなら

S式→JSトランスレータ再び

JavaScript

github.com

動作ページ

まだ全然中身ないです。(ifすらない)

動機

  • 自作SmalltalkVM NirnLeaf用に書いたパーサコンビネータの練習
  • jasjでちょいちょい開発してたけどnode.jsとGaucheが使える環境から離れていろいろ辛くなった
  • ブラウザで動くと良いのでは
  • 最終的にセルフホスティング・拡張できるとそうとうかっこいい

などなど。完全に練習用なので続ける気もそこまで無いです。NirnLeafに飽きたり詰まったりしたら手を入れてみようかな、ぐらい。同じもの作ったりGitHubコントリビューションの練習してみたい人お待ちしております。

どう動くのか

S式でjasjみたいなノリでコードを書くと、JSにトランスレートされてその場でevalし、結果を表示。

単にevalしてるだけなので関数定義(defn)が名前空間に影響及ぼせないっぽい。

例えば次のコードを入力すると

(defn id [x] x)

次のコードが生成されて実行、返り値(undefined)が表示される。

function id (x) {return x;} //=> undefined

あとはスクリーンショットで。。(下から上に流れてる)

f:id:phaendal:20160209155605p:plain

パーサコンビネータについて

がんばってコンビネータをいろいろ組み合わせてパースしてると中間結果をいじったりデバッグするのが辛かった。で、考え方を改めて手でガンガンパーサを書いて、文法に合わせて大まかにコンビネートする方針で行くとスイスイ進みだした。

結果的にコンビネータ(sepBy)を抽出できたし、ストレスも無かった。最初からかっこいいコード書こうとするとほんとうにダメだなあと思いました。にんげんがさき、コンビネータはあと。

広告を非表示にする