MML中間言語、パーサ部分をまずお手軽に作ってみるのはアリかも

MML中間言語で、MML方言の枠を越えて音楽の共有や相互交流ができるかも? とか、中間言語化用のMMLパーサの定義に、BNF系の記述が使えるかも? とか、使えればプログラミング言語の枠を越えてMML文法定義の共有ができるかも? とか、作ったMMLパーサを環境の枠を越えて共有するために例えばブラウザベースのJavascript+WebAudioAPI+MML系ライブラリが使えるかも? みたいな話。
2
瞳孔is横 @cat2151

@cat2151 「ポーティングのコストなくせるからBNFでMMLをASTにできるようにするといいかも」は、「BNFでMML書くのがどんだけ大変か、また、持続的にBNFをうまく共有、修正、メンテしていけるのがどんだけ大変か」の度合いと天秤かなあ

2015-05-30 10:29:30
瞳孔is横 @cat2151

@cat2151 前提として、字句解析・構文解析したあとのAST(抽象構文木)に対して、実際に音を鳴らすなりバイナリ吐くなりのアクションをとらせる処理というのは、完全に別モジュールとして外出しして考えている。ってこれは最初に書いたか。

2015-05-30 10:35:07
瞳孔is横 @cat2151

@cat2151 pegjsブラウザで試した。左に定義を「MMLs = [a-g]*」と書き、右にMMLを書くと、右下のoutputにパース結果が配列で入る。こりゃ楽だ。 pegjs.org/online pic.twitter.com/yCFmKL2GWY

2015-05-30 10:51:12
拡大
瞳孔is横 @cat2151

@cat2151 この右下のoutputのデータが、AST(抽象構文木)をjson形式で表したもので、プログラム上はこれを読み込むと、この場合は単純な文字列の配列として扱える。楽。

2015-05-30 10:54:23
瞳孔is横 @cat2151

@cat2151 このoutputされたASTのjsonをテケトウにjsに食わせて、例えば逆順に並び替えて加工して、再度MMLに戻して、鳴らしてみて、といった簡単なデモをjsで書いてjs投稿系サイトで共有できるかな、と思ったが壁が

2015-05-30 11:19:14
瞳孔is横 @cat2151

@cat2151 壁1。まずjavascriptでMMLを書けるライブラリで、2行(includeと、MML実際に書く1行)で済みそうなものがすぐ見つからなかった。 壁2。そのライブラリをサポートするjavascriptのplaygroundかつ投稿系サイトがすぐ見つからなかった

2015-05-30 11:20:19
瞳孔is横 @cat2151

@cat2151 このレベルの簡単さと環境選ばなさのサービスのjavascript版みたいなのを探してた wonderfl.net/c/62Di

2015-05-30 11:22:13
瞳孔is横 @cat2151

@cat2151 $playmml('cde') って書いたら即音が出るくらいの機能をinclude1行で使えるくらいのjavascriptライブラリがどっかにあるのではと思っている

2015-05-30 11:25:44
瞳孔is横 @cat2151

@cat2151 javascript + Web Audio APIでMMLを鳴らす MMLEmitterを見つけた mohayonao.hatenablog.com/entry/2014/08/…

2015-05-30 17:19:38
瞳孔is横 @cat2151

@cat2151 MMLEmitter で MML を試してみるテスト jsdo.it/cx20/2V5t

2015-05-30 17:20:05
瞳孔is横 @cat2151

@cat2151 JavascriptのplaygroundでMMLを使ってみるサンプルは、先に書いたjsdo.itの「MMLEmitter で MML を試してみるテスト」がある jsdo.it/cx20/2V5t

2015-05-30 17:31:45
瞳孔is横 @cat2151

@cat2151 よって、「MMLをtextboxに入力」「それをパースしてjson得る(パーサはpeg.jsで作る)」「jsonを逆順並び替えなど加工」「そこからMMLを再生成」「鳴らす」は、それなりにできそう。

2015-05-30 17:37:05
瞳孔is横 @cat2151

ファミベのMML文法リファレンスがぐぐって見つかるものか試してみたがあまり見つからなかった

2015-06-09 20:41:29
瞳孔is横 @cat2151

ABA gamesがBulletMLで弾幕という文化を記述し保存することを試みたのと同様に、我々はMML文法をParsing Expression Grammarで記述し保存していくことを試みてもよいのではないだろうか asahi-net.or.jp/~cs8k-cyu/bull…

2015-06-09 20:45:47
瞳孔is横 @cat2151

@cat2151 といったこともちょっぴり思いつつこれを書いていた togetter.com/li/828399

2015-06-09 20:46:52
瞳孔is横 @cat2151

@cat2151 もちろん弾幕同様MMLもバリバリの現役であるのは言わずもがな。 とはいえ、いにしえのMML文法がぐぐってすぐ出てこないのって、失伝フォビアを発症するよね?

2015-06-09 20:49:52
瞳孔is横 @cat2151

MMLをPEGでパースできるようにしておくことのメリット思いつき。 初学者のサポートとなるよう、編集中に裏でパーサ流しておいて文法ミスあれば修正サジェストとか。 この初学者とは「俺ふぁみべMMLは得意なんだけどMSXのMMLは初めて」とかも含むよ

2015-06-09 22:02:10