この記事は 飲酒プログラミング Advent Calendar 2019 11日目の記事です。
本日の飲酒プログラム
友人から台湾旅行土産のビールを頂いたのでそれをつまみにプログラミングです。
SUNMAI のスプリングエールは爽やかな香りが飲みやすくてすぐになくなりました。
続いてこしひかり越後麦酒です。こちらはライスビールということで、米を使ったクラフトビール。米っぽい甘みとやわらかな香りが美味しみでした。おすすめです。
一番美味しいかったのは何がラベルなのかもわからないいい感じビールです。(画像一番左のやつ。)ちゃんとラベル見たら Instagram はあるっぽいです。今風 @alechemist.tw Google 翻訳のアプリで見たらコーンを原料としているっぽいです。うまい。
いいですね。最近のクラフトビールの流行りもあっていろいろなビールが手に入るようになって嬉しいです。
はい。ということで、今作っている言語の続きをやりましょうか。といってもなにもないですが。
とりあえず現状は Writing An Interpreter In Go を読み終わったところです。
一旦既存言語の定義を見てみますかということで Scala の構文サマリページを眺める あーね。
まあ定義も重要だけどとりあえず書いてみますかということで。
cargo new scy
いいですね。すぐ始められるの。最近の言語っぽさを感じます。
余談ですが Scala は { ... }
がブロックというのがとても好きなので真似たいです。果たして真似れる日は来るのだろうか
hexa:scy (master #)$ cargo run
Compiling scy v0.1.0 (/Users/airtoxin/repositories/scy)
Finished dev [unoptimized + debuginfo] target(s) in 1.17s
Running `target/debug/scy`
Hello, world!
いいですね。もう言語完成したといっても過言ではない。 ちなみに scy ってのはいま目に入ったやつからとった名前です。 Scythe 見た目が映えるボードゲームはいいです。Steam 版もあるのでぜひ遊んでください。
そんぜもってトークン定義します。
#[derive(Debug)]
pub struct Token {
pub row: u32,
pub col: u32,
pub token_type: TokenType,
}
impl Token {
pub fn new(row: u32, col: u32, token_type: TokenType) -> Token {
Token { row, col, token_type }
}
}
#[derive(Debug)]
pub enum TokenType {
Plus,
Minus,
Int(String),
EOF,
ILLEGAL,
}
こんなもんですかね。わからんけど。 とりあえず本にあったとおり整数の演算できるようになるところが目標ということでここは。
そんで lexer
pub struct Lexer {
input: String,
position: u32,
row: u32,
col: u32,
}
impl Lexer {
pub fn new(input: String) -> Lexer {
Lexer { input: input.chars(), position: 0, row: 0, col: 0 }
}
}
なるほど。とりあえず構造体つくるだけです。 肝心の字句解析のロジックはまたあしたということで。
今は [酸化防止剤無添加の美味しいワイン。]https://www.suntory.co.jp/wine/original/mutenka/) を飲んでます。 ストレートな名前です。
たしかにうまい。
もう眠いのでおしまいです。 続きはまたあした。