Skip to content

Instantly share code, notes, and snippets.

@airtoxin
Last active December 11, 2019 21:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save airtoxin/8a5844ee9600a5116a56a132aba79088 to your computer and use it in GitHub Desktop.
Save airtoxin/8a5844ee9600a5116a56a132aba79088 to your computer and use it in GitHub Desktop.
飲酒プログラミングアドベントカレンダー2019

飲酒プログラミング2019-12-11

この記事は 飲酒プログラミング 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/) を飲んでます。 ストレートな名前です。

たしかにうまい。

もう眠いのでおしまいです。 続きはまたあした。

@airtoxin
Copy link
Author

IMG_1076

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment