From 28209703c72fb7e9955961dbdb84e24a0f871acd Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Mon, 10 Aug 2026 11:11:18 -0700 Subject: Chapter 25: Modules --- src/main/smp/sys/Scan.smp | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/main/smp/sys/Scan.smp (limited to 'src/main/smp/sys/Scan.smp') diff --git a/src/main/smp/sys/Scan.smp b/src/main/smp/sys/Scan.smp new file mode 100644 index 00000000..acf366f7 --- /dev/null +++ b/src/main/smp/sys/Scan.smp @@ -0,0 +1,36 @@ +// -*- mode: java; -*- + +// Scanner; a simple string parser. +struct Scan { + int !x; // Cursor + u8[~] buf; // Immutable byte array, must be set in 2nd constructor + + new Scan = { u8[~] b -> + buf = b; + }; + + // Skip whitespace + val skip = { -> + while( x < buf# && buf[x] <= ' ' ) + x++; + return self; + }; + + // True if find required character, and skip it; else False. + val match = { u8 c -> + skip(); + if( buf[x] != c ) return false; + x++; + return true; + }; + + // Parse a simple number + val number = { -> + skip(); + bool neg = match('-'); + i64 n = 0; + while( '0' <= buf[x] & buf[x] <= '9' ) + n = n*10 + (buf[x++] - '0'); + return neg ? -n : n; + }; +}; -- cgit v1.2.3