言語実装 Advent Calendar 2019 9日目です。
自作言語 Advent Calendar が埋まらないのでこっちにも参加してみました。
#Oneのレポジトリ
随分と更新していないですが、"One"という自作言語をつくっています。
https://github.com/bg1bgst333/OneLang32
まだ、字句解析器を経て、構文解析器の途中ということで、コンパイルもできないコンパイラです。
(いまのところ、yaccやlexの使用は考えていません。できることに制限をかけたくないためです。)
OneLang32はGUIプログラム用統合開発環境、OneLang32Consoleはコンソール用コンパイラとしていますが、今後どうなるかは未定です。
"One"言語をC++に変換するのが1つ目の目標です。
#Oneの仕様ドラフト
仕様はドラフトを作って提案しています。
https://twitter.com/search?q=%23onelangdraft&src=typed_query&f=live
といっても、Twitterに「#onelangdraft」のタグをつけてつぶやいているだけです。
#Oneのコンセプト
"One"言語は、これまでのプログラミング言語の常識を一切無視して開発しています。
あらゆる言語を超えて、すべてのプログラムを"One"に統一することが最終的な目標です。
今回は、まだ検討段階の仕様の一部を書いていきたいと思います。
#コンソール出力
"Hello, world!"
これだけです。
改行を入れる場合、
"Hello,
world!"
とできるようにする予定です。
#Window表示
Window
staticなウィンドウ表示。右上の閉じるボタンでオブジェクト破棄。タイトル、本文などは無し。
#Windowのインスタンス
Window"タイトル"{
"本文"
} w1, w2
w1"window1"{
"window1の本文"
}
この場合はdynamicなw1, w2がWindow属性で作成され、w1はタイトル"window1"、本文"window1の本文"に変わる。
(詳細はドラフト参照)
#拡張子
".1"を予定。
#各種機能
基本的に変数は宣言不要。
型は自動推論。(型なしかは未定。)
予約語は大量にあり、自由に変数名を使えないような大幅な制限を予定。
基本的に、グラフィックスやHTTPなどのネットワーク系機能などは、ライブラリとして提供されるのが一般的であるが、"One"では各機能ごとに文法が違う仕様にする予定。
たとえば、ダウンロードであれば、
http://bgstation0.com/path/to/hoge.txt -> C:\\hoge\path\to\hoge.txt
UIも、HTMLやAndroidXMLやXAMLなどに換わるUI定義言語を予定している。
たとえば、
-----
|e(100,100)|b|
-----
b->{
msg(e)
}
「ボタンbを押したらエディットコントロールeをメッセージボックスで表示」
という意味である。
((100, 100)は座標。サイズの場合は(100, 100, 300, 200)などを予定。)
同じファイルにUI定義と動作コードを書けるようにする。
#まとめ
こんな感じで適当にいい感じに"1"行で書けるようにしたいから、"One"という名前を付けました。
とはいえ、これを実現するのは極めて難しいとおもっています。