Dart で書いてみました。やっつけなので汚いです。Dart よく知らないけどライフゲームが動いたのでヨシ、というレベルのものです。
https://github.com/sonota88/vm2gol-v2-dart
ベースになっているバージョン: tag:46 のあたり
Dart でプログラムを書くのは今回初めてでしたが、JavaScript と Java あたりを知っていればかなりスムーズに書き始められるなーという感想でした。引っかかるところがほとんどなかったです(今回書いた範囲では)。適当にググりながら 1日で書けてしまいました。
今回の実験的な要素としては、パーサをいじって set
を不要にしてみました。
(追記 2021-03-21: この修正はいったん revert しましたが、一応 trial ブランチに残してあります。)
func main() {
var a;
- set a = 42;
+ a = 42;
}
文の先頭の set
で判別するのをやめて、識別子だったら parseSet_v2()
を呼ぶ。もうちょっとめんどくさいかなと思ってましたが、これだけだったら意外と簡単ですね。
List parseSet_v2() {
// consume("set"); ... これが不要になる
final t = peek();
pos++;
final varName = t.value;
consume("=");
final expr = parseExpr();
consume(";");
return ["set", varName, expr];
}
List parseStmt() {
final t = peek();
if (t.value == "}") {
return null;
}
if (t.value == "func" ) { return parseFunc(); }
// ...
// else if (t.value == "set" ) { return parseSet(); }
// ...
else if (t.value == "_cmt" ) { return parseVmComment(); }
else {
if (t.type == "ident") {
return parseSet_v2();
} else {
throw notYetImpl([ t ]);
}
}
}
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント