最初のステップは字句解析です。これは、単なる文字列の連続を、意味のある最小単位である 「トークン(Token)」 に分割する作業です。
例えば、 {"age": 20} という文字列は、以下のトークンに分解されます。
{ (左波括弧)
"age" (文字列)
| diff --git a/tmp/3.4.0.h b/tmp/4.0.0.h | |
| index f4a48a1..a648e38 100644 | |
| --- a/tmp/3.4.0.h | |
| +++ b/tmp/4.0.0.h | |
| @@ -17,8 +17,8 @@ OPCODE(LOADI32, BSS) /* R[a] = mrb_int((b<<16)+c) */ | |
| OPCODE(LOADSYM, BB) /* R[a] = Syms[b] */ | |
| OPCODE(LOADNIL, B) /* R[a] = nil */ | |
| OPCODE(LOADSELF, B) /* R[a] = self */ | |
| -OPCODE(LOADT, B) /* R[a] = true */ | |
| -OPCODE(LOADF, B) /* R[a] = false */ |
| --- | |
| description: | |
| globs: | |
| alwaysApply: true | |
| --- | |
| # スライド作成ルール | |
| - スライドの利用言語は指示に従うこと。指示がない場合、英語にすること。 | |
| - marp のフォーマットに従って markdown を作成すること。 | |
| - marp でのスライドの作り方は [marp-howto](mdc:marp-howto.md) や [公式ドキュメント](mdc:https:/github.com/marp-team/marp/tree/main/website/docs/guide) を参考にすること。 |
| From d2740fe5956726c787ce29ecf85a51a0b44a9bbd Mon Sep 17 00:00:00 2001 | |
| From: Uchio Kondo <udzura@udzura.jp> | |
| Date: Mon, 17 Mar 2025 11:51:25 +0900 | |
| Subject: [PATCH] Revert "Clear all refined CCs on reopening refinement mod" | |
| This reverts commit 18ee7c9a108bf3424814565377c8796e5e455cf7. | |
| --- | |
| test/ruby/test_refinement.rb | 17 ----------------- | |
| vm_method.c | 1 - | |
| 2 files changed, 18 deletions(-) |
| mrbc_define_method(vm, mrbc_class_array, "new", c_array_new); | |
| mrbc_define_method(vm, mrbc_class_array, "+", c_array_add); | |
| mrbc_define_method(vm, mrbc_class_array, "[]", c_array_get); | |
| mrbc_define_method(vm, mrbc_class_array, "at", c_array_get); | |
| mrbc_define_method(vm, mrbc_class_array, "[]=", c_array_set); | |
| mrbc_define_method(vm, mrbc_class_array, "<<", c_array_push); | |
| mrbc_define_method(vm, mrbc_class_array, "clear", c_array_clear); | |
| mrbc_define_method(vm, mrbc_class_array, "delete_at", c_array_delete_at); | |
| mrbc_define_method(vm, mrbc_class_array, "empty?", c_array_empty); | |
| mrbc_define_method(vm, mrbc_class_array, "size", c_array_size); |
| def clientInitialize: () -> void | |
| def setup: (Integer) -> SharedMemory | |
| def receiveGameParams: (Integer) -> bool | |
| def tick: (Integer) -> void |
| [package] | |
| name = "advent-ruby-grayscale" | |
| version = "0.1.0" | |
| edition = "2021" | |
| [dependencies] | |
| base64 = "0.22.1" | |
| image = { version = "0.25.2", default-features = false, features = ["png"] } | |
| [lib] |
| use core::str; | |
| use core::slice::from_raw_parts; | |
| use base64::{engine::general_purpose, Engine}; | |
| use image::{codecs::png, load_from_memory_with_format, ImageBuffer}; | |
| #[no_mangle] | |
| pub unsafe fn grayscale( | |
| width: u32, height: u32, src: *const u8, slen: i32, | |
| ) -> *const u8 { |
| MATCH_EQ = /(-?)([0-9]*)x(\+|-)([0-9]*)y=(-?)([0-9]+)/ | |
| def parse_equation(eq) | |
| unless eq.match(MATCH_EQ) | |
| raise "unsupported" | |
| end | |
| x = 0 | |
| y = 0 | |
| xsig = $1 |
| コメントをしていきます |