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

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

>例えばMML2MIDやSpice、Sakura等に、「中間言語的なものをコンパイル・逆コンパイルできるシステムがついてたらどうだろうか」なんて考えると、あながち突拍子も無いことでもなくなると思うのです。

2015-05-30 07:23:36
瞳孔is横 @cat2151

MML中間言語について、最初の技術的壁は、各要素(element)と各属性への分解で、MMLパースを行う必要がある、ってとこ。でそれについて思ったんだけど、パーサ作ってしまえば、中間言語フォーマット変わっても割とサクっと変更に対応できるかも

2015-05-30 07:25:00
瞳孔is横 @cat2151

@cat2151 つまり、第一段階パース処理として、「イベント : o4」「イベント : c」「イベント : >」「イベント : d」のように、ドライバが認識できる最小単位に分解する、という処理自体は、作ってしまえば使い回しがきくのかなと。

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

@cat2151 RCP、SMF、NSFなどバイナリについてもある程度は言える。 余談として、いずれも難読化されたものへの対応が大変だけど、それはあとまわしでいいやって思う。

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

@cat2151 この話題のポイントは、「翻訳しやすさ」つまり、データを扱う処理のソースコードそのものについても共有や開発、メンテをしやすいのではと思うところ。

2015-05-30 07:54:03
瞳孔is横 @cat2151

@cat2151 MML中間言語は既に何十年単位でいろんな人が考案してると思うが、扱いやすいフォーマット同士であれば、中間言語どうしの相互翻訳というのは、MMLやmdx等バイナリ間での相互翻訳よりも、比較的楽なのでは、と思う。もちろん超簡単というほどではない

2015-05-30 07:55:25
瞳孔is横 @cat2151

@cat2151 このあたりを積み重ねると、実現可能性はそれなりに上がってゆくのかなと思った

2015-05-30 07:57:42
瞳孔is横 @cat2151

@1re1 今のところはまだ妄想段階ですね。もういくつか段階が進むと、じゃー実際に継続的にコーディングを進めていけるか試してみるかー、ってなると思いますが、まだそこまでは考えがまとまってないです。

2015-05-30 07:59:26
瞳孔is横 @cat2151

@cat2151 いろんな人がいろんな中間言語フォーマット作っても、ある程度なんとかなるのかも、って思うのよね。 先に書いたとおり、中間言語どうしの相互翻訳なら比較的やりやすい気がする。

2015-05-30 08:03:31
瞳孔is横 @cat2151

@cat2151 いろんな人がいろんな中間言語フォーマットを試すことにより、その多様性から相互に改良点が見つかっていったりするとおいしいのではと思う

2015-05-30 08:06:40
瞳孔is横 @cat2151

@cat2151 もうちょっと具体化する。今話題にしてるのは、MML構文解析器であり、機能は1つ。MMLをフェッチ(最小単位1つぶん読み進めて、それを取得)し、それをなんらかのデータ(例えば配列)に出力する。つまり機能は2つ

2015-05-30 08:43:16
瞳孔is横 @cat2151

@1re1 試してみた結果そうなったらそれはそれで、いい実験結果が得られたということで(おい

2015-05-30 08:45:06
瞳孔is横 @cat2151

@cat2151 MMLパーサってパーサジェネレータで出力できるのかな? あるいはパーサジェネレータで出力できるような新MML規格を考える人もいるんだろうか(また一つMMLの方言が増える

2015-05-30 08:46:01
瞳孔is横 @cat2151

@cat2151 3種類のパーサジェネレータで3種類のMMLのパーサをそれぞれジェネレートして、それぞれ3曲ずつシンプルなMMLをパースさせて結果をみると、合計27個の実験結果が得られるね

2015-05-30 08:50:36
瞳孔is横 @cat2151

@cat2151 パーサジェネレータが使えるなら、というかMML文法をEBNFのような記法でファイルに書いて共有できるなら、プログラム言語や環境に依存する部分が解決できて、いろいろ楽なのかも。

2015-05-30 09:19:07
瞳孔is横 @cat2151

@cat2151 最もシンプルなMML文法のいくつかを、EBNFでファイルに書いて、そこからパーサジェネレータでMMLパーサを生成できるか、というのは試してもよさそうだ。

2015-05-30 09:31:11
瞳孔is横 @cat2151

@cat2151 パーサジェネレータ参考ページ。さっきぐぐったことはだいたいここにも書いてあった catch.jp/wiki/index.php…

2015-05-30 09:32:13
瞳孔is横 @cat2151

@cat2151 パーサーについて。EBNFのようなCFG(文法)が枯れていつつ現役なイメージを持った slideshare.net/takahashim/wha…

2015-05-30 09:42:36
瞳孔is横 @cat2151

@cat2151 俺言語構文解析器をpegjsで作る話。 MMLpegjsを書いて、このようにMMLをJSONデータAST(抽象構文木)に翻訳できるなら、それはMML中間言語の一種といえそうだ qiita.com/h_demon/items/…

2015-05-30 09:54:51
瞳孔is横 @cat2151

@cat2151 生成されたASTは扱いやすいデータ形式なので、以降はツールで加工するなりなんなりしてやればよい。もっと扱いやすく加工するなら属性そぎ落として配列に突っ込んでもいい

2015-05-30 09:56:09
瞳孔is横 @cat2151

@cat2151 pegjsファイルのメリットはパーサジェネレータがブラウザベースで動くので、「MML用pegjs書いたよ」って誰かが共有すれば誰でもブラウザで構文解析器が吐けるのではという点、と思っている

2015-05-30 09:57:33
瞳孔is横 @cat2151

@cat2151 そもそも「MMLはBNFでパースできるのか、どんなのがどれくらいできて、できないのはどれくらいか」。 ぐぐると1個例があった tobysoft.net/wiki/index.php…

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

@cat2151 この例は参考になる。トラック構造を省略したMMLであれば、この例でパースできそうに見える。パースというかトークン化かな。

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

@cat2151 MML構文解析器の定義をBNF系文法で記述するにあたり、まず目指すのはトラックを省略したMMLのトークン化の定義、というのは、わかりやすいかも。

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

@cat2151 MMLをBNF系文法で定義してjay(Javaのyacc)でパースするときの苦労話。 veritas-vos-liberabit.com/note_on/2009/0…

2015-05-30 10:21:12