プログラム

関数内型定義

関数内で型が定義できるようになった インナー関数が作れたついでにやってみたらすぐできた メソッド的なものは作るつもりはないので大体そろった感じ 次はなにつくろっかなー 例外関係かな

空気を読んだ関数のオーバーロード

関数の戻り値から関数のオーバーロードができるようになった いゃったぁ! こんな書き方しないけど!今までインナー関数はマングリング(?)してグローバル関数として作っていたけど returnを関数として実装している都合、関数毎にインナー関数用のスコープを…

空配列の型解決

空配列の使っているところを見て型推論っぽいのをできるようにした 型解決がその場しのぎで、つぎはぎだらけのよく分からないものになっていく 大して関係ないけど、WSHの↓が動かなくなっていた echoなんてコマンドないって怒られる 変わったことと言えばWin…

戻り値だけ異なる関数のオーバーロード

戻り値だけ異なる関数をなんちゃって型推論して解決することができた 約1年越しにほっといた機能を夜中のテンションで作成 元は数値型をIntかFloatかShortなどなど、使っているところから推論したいってのが始まり まだそっちはできてないので何とか考える欠…

ブラウザを作ってみる 2日目

なんとなくタブっぽいものが作れた 実際にはImageButtonを並べているだけ 選択したときのハイライトとか付けたい 画面をキャプチャするタイミングが分からん setPictureListenerとかそれっぽい名前のリスナはObsoluteでござるとか言われるし じゃあ代替の関…

ブラウザを作ってみる

AndroidでWebViewはめ込んだだけのブラウザを作ってみる どうにも思ったようなものがないこんだけイジる低速SIMを使ってるからデフォで外部ファイル(js、css、画像全て)は読み込み不要 タブ化してタブの切り替えは画面下並べる ボタンはメニューとタブを閉じ…

無線&タッチセンサー

無線とタッチセンサー化したくてとりあえずAdafruit Feather 32u4 Bluefruit LEを購入 サンプルいじってBluetoothのキーボードにするのはすぐできた 超簡単(^-^) Amazon.co.jp: Adafruit Feather 32u4 Bluefruit LE: DIY・工具ただ、↑にはピンヘッダついて…

データグローブ試作 その2

手袋の指先にポッケを作りセンサーをぶっさして多少見栄えはよくなった センサーがよくずれるけどなんとかならんもんか・・・ 今はマジックテープで縛って両面テープでくっつけている、でもよくずれるソフト側はC言語ならかじったことあるのでめちゃ簡単に作…

データグローブ試作

曲げセンサーが届いたので早速くっつけてみた センサーに半田付けしてブレッドボードにぶっさす簡単設計 長さが足りなくなるとヤダから、長めのワイヤ付けたら余りまくり 5cmくらいのワイヤのがよかったかしら・・・ 曲げると抵抗値が変わるらしいけど そな…

Arduino買った

こないだ買ったキーボードがいけてない アルファベットはかろうじてブラインドで打てるが記号キーが打てない キーボードのFJのポッチをこんなに探し当てるのが大変なんて・・・ おまけに移動キーがFnとのコンビネーションしかないのだが、IJKLという変態仕様…

ローカルリポジトリをGitHubへ後から上げる方法

毎回よくわからなくなるのでメモ GitHubでリポジトリは作っておく、リモートリポジトリの設定はGUIでやっておく リポジトリ名は.gitって付いているほう https://github.com/zenuas/Roku https://github.com/zenuas/Roku.git git fetch git merge origin/mast…

.NETのジェネリクス解決

.NETのジェネリクス解決が意外とめんどくさい 型にジェネリクスがついている場合と関数にジェネリクスがついている場合がある例えばListなんかは型にジェネリクスがついているのでこんな感じ Dim list = GetType(List(Of )) Dim list_add = list.GetMethod("…

.NETのメソッドが呼べた

.NETのメソッドが呼べるようになった 作っている言語にメソッドなんて概念をつけていないので「型.メソッド(引数)」の並びを「メソッド(型, 引数)」に変えて関数コールするようにした 幸いCILではどっちでも一緒だしねちょっと面倒なのが名前空間 「DateTime…

.NETのコンストラクタが呼べた

.NETのコンストラクタを呼べるようになった 値型でコンストラクタの引数無しはinitobjなの? とりあえずnewobjしか対応してない、DateTimeを引数無しで作成することができへんけどまぁええわ コンストラクタの解決はめんどくさかったのでこんな風にしておい…

.NETの関数が呼べた

.NETの関数が呼べるようになった おかげでprint関数とかをハードコーディングしなくてもmscorlibをロードしておけば System.Console.WriteLineを呼べる感じただ、コンストラクタを呼べるように作ってないので呼べるのはまだクラス関数だけ! メソッドは、、…

WMI Win32_Processorが使えない

最近Windows7→10にした一台でアップデートしたとたんWin32_Processorが使えなくなってた LoadPercentageがずっとnullになる感じ 他のWin10マシンでは問題ないので原因はよくわかんないアップデート後にCPUの使用ログを見たらずっと0%のままなので何事かと思…

配列が書けた

配列が使えるようになった 、、、と言っても要素足したりはまだ、おいおいやっとく要素なしの空配列の型解決が超むずそうだったので未対応 nullを対応する時に一緒に対応を考えよう クラス構文を用意してないけど.NET Frameworkのメソッドは普通に呼べそう …

複数ファイルからのコンパイル

複数ファイルからのコンパイルができた ファイルを1つのNamespaceにする感じ今んとこuseすると相手Namespaceの関数だけを取り込むような動きをする エントリーポイントになるNamespaceしか実行しないから use先のファイルに単に「print(1)」と書いたら動かな…

型解決

複数ファイルからコンパイルすんのに型解決は何パス必要か? お手軽にやるとしたら3パスかなぁ1パス目でstructのプロトタイプ作っておいて 2パス目でsubのプロトタイプ作る 3パス目でinferする減らす方法あるのかも知んないけどこれが一番スッキリ分かりやす…

カリー化 続々

クロージャを実装できた 関数外の変数に手を出している関数をマークして 関数外の変数を一個のframeにまとめる var a = 1 var b = 2 sub f(c: Int) print(a + b + c) f(3)↑これを↓こう変換する var a = 1 var b = 2 sub f_(frame, c: Int) print(frame.a + f…

カリー化 続き

上等カレーに行った 値段高いやろ、エビフライ乗ってるとはいえ1000円って…ルーの味はまんま得正 得正には毎日通ってたのでまず間違いない 得正はカレーうどんなのでスープで多少割ってたかもしれないが、得正の常連であったもんがほぼ違いが感じられないレ…

関数のカリー化

CILでカリー化をする時のメモ 部分適用かな?まぁどっちでもいいや クロージャをCILで実装するのに部分適用でやりたかったらメモ 例えばこんな感じの3引数の関数で先頭の引数をカリー化しちゃう curryなんて関数があった場合 int32 f1(int32 a, int32 b, int…

関数の呼び出し方

関数はどうやって実行できるのか調べてみた 前にも調べたような気がするけど、忘れたのでもう一回 C#でInt->String->Intの関数を呼ぶ場合 delegate int F_dele(String s); static int f(String s) {return(999);} var x = new F_dele(f); Console.Write(x("H…

ラムダ式の定義

こういう感じの「(x, y) => x」C#みたいなラムダ式を加えたら reduce/reduce conflictでおま、と怒られた ちゃんとreduce/reduceの判定できたんだ、このクソパーサジェネレータ・・・LALR(k)にするには今更どーなおしたらいいもんか分からない とりあえず文…

構造体が書けた

構造体が書けた 構造体そのものは簡単だったけど総称型を突っ込んだら内部構造色々変えないとうまくいかず面倒 こっちは当面ほっといて先にクロージャを実装しようかなぁ とりあえずドラゴンクエストビルダーズが発売される前に一通りやっちゃわないとほっと…

if文が書けた

VS2015用に作り直しているコンパイラで、やっとこif文が使えるようになった if文の式部分にはカッコがいらないのに関数呼び出しにはカッコがいるとか ちょっとどやねん

関数宣言

数値と文字列を受け取って数値を返す関数の定義を書くとしたらどう書いたほうがベターか Pascal系とC系のちゃんぽんみたいな構文定義を使っていたけど 関数呼び出しにカッコを使わないパーサを書いたら、なんとなく関数定義にカッコを書くのがダルくなった …

インデント対応パーサ

インデントでなんとなくパースできるのができた やっぱり文法は普通にしてlexでなんとかするのがいいかな %default Node %token<Node> BEGIN END %token<Node> var expr %left '+' '-' %left '*' '/' %% program : void | program stmt stmt : begin block end begin : B</node></node>…

字句解析のつづき

あ、できた a+b* c/ d-e 結果: ((a) + ((b * c) / d)) - e 文法はいじらんで字句解析で次がEOLを受け入れるっぽかったらEOLをぶちこむ EOLを受け入れへんかったら飲み込むって %default Node %token<Node> var expr %left '+' '-' %left '*' '/' %% program : void</node>…

文脈依存字句解析

改行で式が終わるパーサを書きたいけどよく分からない 式の明らか途中なら次行に継続したい なんかの本に状態付き字句解析だか文脈依存字句解析ってのってた気がする…? stmt : expr eol expr : var | expr '+' expr var : VAR eol : {フラグ立てる} EOL {フ…