From d71bc584205f1a25699f4d524ed637a2168386a1 Mon Sep 17 00:00:00 2001 From: core Date: Tue, 16 Jan 2024 17:07:48 -0500 Subject: [PATCH] refactor --- .idea/.gitignore | 8 ++ .idea/kabel.iml | 12 +++ .idea/modules.xml | 8 ++ .idea/vcs.xml | 6 ++ Cargo.lock | 95 ++++++++++++++++++ Cargo.toml | 6 ++ {kabel-rs/src => examples}/test.kab | 2 +- {kabel-rs/src => examples}/try.kab | 0 kabel-rs/Cargo.lock | 7 -- kabel-rs/src/errors.rs | 1 - kabel-rs/target/.rustc_info.json | 1 - kabel-rs/target/CACHEDIR.TAG | 3 - kabel-rs/target/debug/.cargo-lock | 0 .../invoked.timestamp | 1 - .../output-bin-kabel-rs | 21 ---- .../debug/deps/kabel_rs-b7a5db911f8343d3.d | 6 -- .../dep-graph.part.bin | Bin 79399 -> 0 bytes .../s-gshw4oxylk-ugb9md.lock | 0 kabel-zig/build.zig | 91 ----------------- kabel-zig/build.zig.zon | 62 ------------ kabel-zig/src/lexer.zig | 4 - kabel-zig/src/lexutil.zig | 45 --------- kabel-zig/src/main.zig | 20 ---- kabel-zig/src/modules.zig | 8 -- kabel-zig/src/root.zig | 10 -- kabel-zig/src/variables.zig | 7 -- kabel.py | 75 -------------- kabel/Cargo.toml | 11 ++ {kabel-rs => kabel}/src/main.rs | 12 +-- {kabel-rs => libkabel}/Cargo.toml | 3 +- libkabel/src/errors.rs | 3 + {kabel-rs => libkabel}/src/lexer.rs | 7 +- {kabel-rs => libkabel}/src/lexutil.rs | 0 libkabel/src/lib.rs | 5 + {kabel-rs => libkabel}/src/modules.rs | 0 {kabel-rs => libkabel}/src/variables.rs | 0 36 files changed, 162 insertions(+), 378 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/kabel.iml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 Cargo.lock create mode 100644 Cargo.toml rename {kabel-rs/src => examples}/test.kab (52%) rename {kabel-rs/src => examples}/try.kab (100%) delete mode 100644 kabel-rs/Cargo.lock delete mode 100644 kabel-rs/src/errors.rs delete mode 100644 kabel-rs/target/.rustc_info.json delete mode 100644 kabel-rs/target/CACHEDIR.TAG delete mode 100644 kabel-rs/target/debug/.cargo-lock delete mode 100644 kabel-rs/target/debug/.fingerprint/kabel-rs-b7a5db911f8343d3/invoked.timestamp delete mode 100644 kabel-rs/target/debug/.fingerprint/kabel-rs-b7a5db911f8343d3/output-bin-kabel-rs delete mode 100644 kabel-rs/target/debug/deps/kabel_rs-b7a5db911f8343d3.d delete mode 100644 kabel-rs/target/debug/incremental/kabel_rs-2dfctajrnpnqg/s-gshw4oxylk-ugb9md-working/dep-graph.part.bin delete mode 100644 kabel-rs/target/debug/incremental/kabel_rs-2dfctajrnpnqg/s-gshw4oxylk-ugb9md.lock delete mode 100644 kabel-zig/build.zig delete mode 100644 kabel-zig/build.zig.zon delete mode 100644 kabel-zig/src/lexer.zig delete mode 100644 kabel-zig/src/lexutil.zig delete mode 100644 kabel-zig/src/main.zig delete mode 100644 kabel-zig/src/modules.zig delete mode 100644 kabel-zig/src/root.zig delete mode 100644 kabel-zig/src/variables.zig delete mode 100644 kabel.py create mode 100644 kabel/Cargo.toml rename {kabel-rs => kabel}/src/main.rs (83%) rename {kabel-rs => libkabel}/Cargo.toml (82%) create mode 100644 libkabel/src/errors.rs rename {kabel-rs => libkabel}/src/lexer.rs (97%) rename {kabel-rs => libkabel}/src/lexutil.rs (100%) create mode 100644 libkabel/src/lib.rs rename {kabel-rs => libkabel}/src/modules.rs (100%) rename {kabel-rs => libkabel}/src/variables.rs (100%) diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/kabel.iml b/.idea/kabel.iml new file mode 100644 index 0000000..eaf88de --- /dev/null +++ b/.idea/kabel.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..f625fe9 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..fd5c6d0 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,95 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "kabel" +version = "0.1.0" +dependencies = [ + "libkabel", +] + +[[package]] +name = "libkabel" +version = "0.1.0" +dependencies = [ + "tracing", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "proc-macro2" +version = "1.0.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "syn" +version = "2.0.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", +] + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..e92d6e1 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,6 @@ +[workspace] +members = [ + "kabel", + "libkabel" +] +resolver = "2" \ No newline at end of file diff --git a/kabel-rs/src/test.kab b/examples/test.kab similarity index 52% rename from kabel-rs/src/test.kab rename to examples/test.kab index c88670a..a44821d 100644 --- a/kabel-rs/src/test.kab +++ b/examples/test.kab @@ -1,3 +1,3 @@ #!/usr/bin/env kabel declare p = 5; -debug: print using (3 + p) * 2; +debug: print using (3 + 5) * 2; diff --git a/kabel-rs/src/try.kab b/examples/try.kab similarity index 100% rename from kabel-rs/src/try.kab rename to examples/try.kab diff --git a/kabel-rs/Cargo.lock b/kabel-rs/Cargo.lock deleted file mode 100644 index 29361f8..0000000 --- a/kabel-rs/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "kabel-rs" -version = "0.1.0" diff --git a/kabel-rs/src/errors.rs b/kabel-rs/src/errors.rs deleted file mode 100644 index 8b13789..0000000 --- a/kabel-rs/src/errors.rs +++ /dev/null @@ -1 +0,0 @@ - diff --git a/kabel-rs/target/.rustc_info.json b/kabel-rs/target/.rustc_info.json deleted file mode 100644 index 49d1dec..0000000 --- a/kabel-rs/target/.rustc_info.json +++ /dev/null @@ -1 +0,0 @@ -{"rustc_fingerprint":7338601337485693249,"outputs":{"4614504638168534921":{"success":true,"status":"","code":0,"stdout":"rustc 1.74.0 (79e9716c9 2023-11-13)\nbinary: rustc\ncommit-hash: 79e9716c980570bfd1f666e3b16ac583f0168962\ncommit-date: 2023-11-13\nhost: x86_64-unknown-linux-gnu\nrelease: 1.74.0\nLLVM version: 17.0.4\n","stderr":""},"15729799797837862367":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n/home/tm85/.rustup/toolchains/stable-x86_64-unknown-linux-gnu\noff\npacked\nunpacked\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"gnu\"\ntarget_family=\"unix\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"linux\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"unknown\"\nunix\n","stderr":""}},"successes":{}} \ No newline at end of file diff --git a/kabel-rs/target/CACHEDIR.TAG b/kabel-rs/target/CACHEDIR.TAG deleted file mode 100644 index 20d7c31..0000000 --- a/kabel-rs/target/CACHEDIR.TAG +++ /dev/null @@ -1,3 +0,0 @@ -Signature: 8a477f597d28d172789f06886806bc55 -# This file is a cache directory tag created by cargo. -# For information about cache directory tags see https://bford.info/cachedir/ diff --git a/kabel-rs/target/debug/.cargo-lock b/kabel-rs/target/debug/.cargo-lock deleted file mode 100644 index e69de29..0000000 diff --git a/kabel-rs/target/debug/.fingerprint/kabel-rs-b7a5db911f8343d3/invoked.timestamp b/kabel-rs/target/debug/.fingerprint/kabel-rs-b7a5db911f8343d3/invoked.timestamp deleted file mode 100644 index e00328d..0000000 --- a/kabel-rs/target/debug/.fingerprint/kabel-rs-b7a5db911f8343d3/invoked.timestamp +++ /dev/null @@ -1 +0,0 @@ -This file has an mtime of when this was started. \ No newline at end of file diff --git a/kabel-rs/target/debug/.fingerprint/kabel-rs-b7a5db911f8343d3/output-bin-kabel-rs b/kabel-rs/target/debug/.fingerprint/kabel-rs-b7a5db911f8343d3/output-bin-kabel-rs deleted file mode 100644 index 9116306..0000000 --- a/kabel-rs/target/debug/.fingerprint/kabel-rs-b7a5db911f8343d3/output-bin-kabel-rs +++ /dev/null @@ -1,21 +0,0 @@ -{"message":"expected one of `(`, `,`, `=`, `{`, or `}`, found `Subtract`","code":null,"level":"error","spans":[{"file_name":"src/lexer.rs","byte_start":58,"byte_end":58,"line_start":4,"line_end":4,"column_start":8,"column_end":8,"is_primary":false,"text":[{"text":" Add","highlight_start":8,"highlight_end":8}],"label":"expected one of `(`, `,`, `=`, `{`, or `}`","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/lexer.rs","byte_start":63,"byte_end":71,"line_start":5,"line_end":5,"column_start":5,"column_end":13,"is_primary":true,"text":[{"text":" Subtract","highlight_start":5,"highlight_end":13}],"label":"unexpected token","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"missing `,`","code":null,"level":"help","spans":[{"file_name":"src/lexer.rs","byte_start":58,"byte_end":58,"line_start":4,"line_end":4,"column_start":8,"column_end":8,"is_primary":true,"text":[{"text":" Add","highlight_start":8,"highlight_end":8}],"label":null,"suggested_replacement":",","suggestion_applicability":"MaybeIncorrect","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[38;5;9merror\u001b[0m\u001b[0m\u001b[1m: expected one of `(`, `,`, `=`, `{`, or `}`, found `Subtract`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/lexer.rs:5:5\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m4\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m Add\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m-\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mexpected one of `(`, `,`, `=`, `{`, or `}`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mhelp: missing `,`\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m5\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m Subtract\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9m^^^^^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9munexpected token\u001b[0m\n\n"} -{"message":"expected one of `(`, `,`, `=`, `{`, or `}`, found `Multiply`","code":null,"level":"error","spans":[{"file_name":"src/lexer.rs","byte_start":71,"byte_end":71,"line_start":5,"line_end":5,"column_start":13,"column_end":13,"is_primary":false,"text":[{"text":" Subtract","highlight_start":13,"highlight_end":13}],"label":"expected one of `(`, `,`, `=`, `{`, or `}`","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/lexer.rs","byte_start":76,"byte_end":84,"line_start":6,"line_end":6,"column_start":5,"column_end":13,"is_primary":true,"text":[{"text":" Multiply","highlight_start":5,"highlight_end":13}],"label":"unexpected token","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"missing `,`","code":null,"level":"help","spans":[{"file_name":"src/lexer.rs","byte_start":71,"byte_end":71,"line_start":5,"line_end":5,"column_start":13,"column_end":13,"is_primary":true,"text":[{"text":" Subtract","highlight_start":13,"highlight_end":13}],"label":null,"suggested_replacement":",","suggestion_applicability":"MaybeIncorrect","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[38;5;9merror\u001b[0m\u001b[0m\u001b[1m: expected one of `(`, `,`, `=`, `{`, or `}`, found `Multiply`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/lexer.rs:6:5\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m5\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m Subtract\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m-\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mexpected one of `(`, `,`, `=`, `{`, or `}`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mhelp: missing `,`\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m6\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m Multiply\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9m^^^^^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9munexpected token\u001b[0m\n\n"} -{"message":"expected one of `(`, `,`, `=`, `{`, or `}`, found `Divide`","code":null,"level":"error","spans":[{"file_name":"src/lexer.rs","byte_start":84,"byte_end":84,"line_start":6,"line_end":6,"column_start":13,"column_end":13,"is_primary":false,"text":[{"text":" Multiply","highlight_start":13,"highlight_end":13}],"label":"expected one of `(`, `,`, `=`, `{`, or `}`","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/lexer.rs","byte_start":89,"byte_end":95,"line_start":7,"line_end":7,"column_start":5,"column_end":11,"is_primary":true,"text":[{"text":" Divide","highlight_start":5,"highlight_end":11}],"label":"unexpected token","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"missing `,`","code":null,"level":"help","spans":[{"file_name":"src/lexer.rs","byte_start":84,"byte_end":84,"line_start":6,"line_end":6,"column_start":13,"column_end":13,"is_primary":true,"text":[{"text":" Multiply","highlight_start":13,"highlight_end":13}],"label":null,"suggested_replacement":",","suggestion_applicability":"MaybeIncorrect","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[38;5;9merror\u001b[0m\u001b[0m\u001b[1m: expected one of `(`, `,`, `=`, `{`, or `}`, found `Divide`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/lexer.rs:7:5\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m6\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m Multiply\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m-\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mexpected one of `(`, `,`, `=`, `{`, or `}`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mhelp: missing `,`\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m7\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m Divide\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9m^^^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9munexpected token\u001b[0m\n\n"} -{"message":"expected one of `(`, `,`, `=`, `{`, or `}`, found `Exponentiate`","code":null,"level":"error","spans":[{"file_name":"src/lexer.rs","byte_start":95,"byte_end":95,"line_start":7,"line_end":7,"column_start":11,"column_end":11,"is_primary":false,"text":[{"text":" Divide","highlight_start":11,"highlight_end":11}],"label":"expected one of `(`, `,`, `=`, `{`, or `}`","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/lexer.rs","byte_start":100,"byte_end":112,"line_start":8,"line_end":8,"column_start":5,"column_end":17,"is_primary":true,"text":[{"text":" Exponentiate","highlight_start":5,"highlight_end":17}],"label":"unexpected token","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"missing `,`","code":null,"level":"help","spans":[{"file_name":"src/lexer.rs","byte_start":95,"byte_end":95,"line_start":7,"line_end":7,"column_start":11,"column_end":11,"is_primary":true,"text":[{"text":" Divide","highlight_start":11,"highlight_end":11}],"label":null,"suggested_replacement":",","suggestion_applicability":"MaybeIncorrect","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[38;5;9merror\u001b[0m\u001b[0m\u001b[1m: expected one of `(`, `,`, `=`, `{`, or `}`, found `Exponentiate`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/lexer.rs:8:5\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m7\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m Divide\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m-\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mexpected one of `(`, `,`, `=`, `{`, or `}`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mhelp: missing `,`\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m8\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m Exponentiate\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9m^^^^^^^^^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9munexpected token\u001b[0m\n\n"} -{"message":"expected one of `(`, `,`, `=`, `{`, or `}`, found `Modulus`","code":null,"level":"error","spans":[{"file_name":"src/lexer.rs","byte_start":112,"byte_end":112,"line_start":8,"line_end":8,"column_start":17,"column_end":17,"is_primary":false,"text":[{"text":" Exponentiate","highlight_start":17,"highlight_end":17}],"label":"expected one of `(`, `,`, `=`, `{`, or `}`","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/lexer.rs","byte_start":117,"byte_end":124,"line_start":9,"line_end":9,"column_start":5,"column_end":12,"is_primary":true,"text":[{"text":" Modulus","highlight_start":5,"highlight_end":12}],"label":"unexpected token","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"missing `,`","code":null,"level":"help","spans":[{"file_name":"src/lexer.rs","byte_start":112,"byte_end":112,"line_start":8,"line_end":8,"column_start":17,"column_end":17,"is_primary":true,"text":[{"text":" Exponentiate","highlight_start":17,"highlight_end":17}],"label":null,"suggested_replacement":",","suggestion_applicability":"MaybeIncorrect","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[38;5;9merror\u001b[0m\u001b[0m\u001b[1m: expected one of `(`, `,`, `=`, `{`, or `}`, found `Modulus`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/lexer.rs:9:5\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m8\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m Exponentiate\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m-\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mexpected one of `(`, `,`, `=`, `{`, or `}`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mhelp: missing `,`\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m9\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m Modulus\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9m^^^^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9munexpected token\u001b[0m\n\n"} -{"message":"expected one of `(`, `,`, `=`, `{`, or `}`, found `Or`","code":null,"level":"error","spans":[{"file_name":"src/lexer.rs","byte_start":163,"byte_end":163,"line_start":13,"line_end":13,"column_start":8,"column_end":8,"is_primary":false,"text":[{"text":" And","highlight_start":8,"highlight_end":8}],"label":"expected one of `(`, `,`, `=`, `{`, or `}`","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/lexer.rs","byte_start":168,"byte_end":170,"line_start":14,"line_end":14,"column_start":5,"column_end":7,"is_primary":true,"text":[{"text":" Or","highlight_start":5,"highlight_end":7}],"label":"unexpected token","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"missing `,`","code":null,"level":"help","spans":[{"file_name":"src/lexer.rs","byte_start":163,"byte_end":163,"line_start":13,"line_end":13,"column_start":8,"column_end":8,"is_primary":true,"text":[{"text":" And","highlight_start":8,"highlight_end":8}],"label":null,"suggested_replacement":",","suggestion_applicability":"MaybeIncorrect","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[38;5;9merror\u001b[0m\u001b[0m\u001b[1m: expected one of `(`, `,`, `=`, `{`, or `}`, found `Or`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/lexer.rs:14:5\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m13\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m And\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m-\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mexpected one of `(`, `,`, `=`, `{`, or `}`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mhelp: missing `,`\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m14\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m Or\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9m^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9munexpected token\u001b[0m\n\n"} -{"message":"expected one of `,`, `=`, or `}`, found `Num`","code":null,"level":"error","spans":[{"file_name":"src/lexer.rs","byte_start":209,"byte_end":209,"line_start":18,"line_end":18,"column_start":16,"column_end":16,"is_primary":false,"text":[{"text":" Str(String)","highlight_start":16,"highlight_end":16}],"label":"expected one of `,`, `=`, or `}`","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/lexer.rs","byte_start":214,"byte_end":217,"line_start":19,"line_end":19,"column_start":5,"column_end":8,"is_primary":true,"text":[{"text":" Num(f64)","highlight_start":5,"highlight_end":8}],"label":"unexpected token","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"missing `,`","code":null,"level":"help","spans":[{"file_name":"src/lexer.rs","byte_start":209,"byte_end":209,"line_start":18,"line_end":18,"column_start":16,"column_end":16,"is_primary":true,"text":[{"text":" Str(String)","highlight_start":16,"highlight_end":16}],"label":null,"suggested_replacement":",","suggestion_applicability":"MaybeIncorrect","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[38;5;9merror\u001b[0m\u001b[0m\u001b[1m: expected one of `,`, `=`, or `}`, found `Num`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/lexer.rs:19:5\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m18\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m Str(String)\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m-\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mexpected one of `,`, `=`, or `}`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mhelp: missing `,`\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m19\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m Num(f64)\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9m^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9munexpected token\u001b[0m\n\n"} -{"message":"expected one of `(`, `,`, `=`, `{`, or `}`, found `Foreach`","code":null,"level":"error","spans":[{"file_name":"src/lexer.rs","byte_start":254,"byte_end":254,"line_start":23,"line_end":23,"column_start":7,"column_end":7,"is_primary":false,"text":[{"text":" If","highlight_start":7,"highlight_end":7}],"label":"expected one of `(`, `,`, `=`, `{`, or `}`","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/lexer.rs","byte_start":259,"byte_end":266,"line_start":24,"line_end":24,"column_start":5,"column_end":12,"is_primary":true,"text":[{"text":" Foreach","highlight_start":5,"highlight_end":12}],"label":"unexpected token","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"missing `,`","code":null,"level":"help","spans":[{"file_name":"src/lexer.rs","byte_start":254,"byte_end":254,"line_start":23,"line_end":23,"column_start":7,"column_end":7,"is_primary":true,"text":[{"text":" If","highlight_start":7,"highlight_end":7}],"label":null,"suggested_replacement":",","suggestion_applicability":"MaybeIncorrect","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[38;5;9merror\u001b[0m\u001b[0m\u001b[1m: expected one of `(`, `,`, `=`, `{`, or `}`, found `Foreach`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/lexer.rs:24:5\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m23\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m If\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m-\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mexpected one of `(`, `,`, `=`, `{`, or `}`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mhelp: missing `,`\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m24\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m Foreach\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9m^^^^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9munexpected token\u001b[0m\n\n"} -{"message":"expected one of `(`, `,`, `=`, `{`, or `}`, found `While`","code":null,"level":"error","spans":[{"file_name":"src/lexer.rs","byte_start":266,"byte_end":266,"line_start":24,"line_end":24,"column_start":12,"column_end":12,"is_primary":false,"text":[{"text":" Foreach","highlight_start":12,"highlight_end":12}],"label":"expected one of `(`, `,`, `=`, `{`, or `}`","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/lexer.rs","byte_start":271,"byte_end":276,"line_start":25,"line_end":25,"column_start":5,"column_end":10,"is_primary":true,"text":[{"text":" While","highlight_start":5,"highlight_end":10}],"label":"unexpected token","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"missing `,`","code":null,"level":"help","spans":[{"file_name":"src/lexer.rs","byte_start":266,"byte_end":266,"line_start":24,"line_end":24,"column_start":12,"column_end":12,"is_primary":true,"text":[{"text":" Foreach","highlight_start":12,"highlight_end":12}],"label":null,"suggested_replacement":",","suggestion_applicability":"MaybeIncorrect","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[38;5;9merror\u001b[0m\u001b[0m\u001b[1m: expected one of `(`, `,`, `=`, `{`, or `}`, found `While`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/lexer.rs:25:5\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m24\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m Foreach\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m-\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mexpected one of `(`, `,`, `=`, `{`, or `}`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mhelp: missing `,`\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m25\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m While\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9m^^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9munexpected token\u001b[0m\n\n"} -{"message":"expected one of `(`, `,`, `=`, `{`, or `}`, found `To`","code":null,"level":"error","spans":[{"file_name":"src/lexer.rs","byte_start":276,"byte_end":276,"line_start":25,"line_end":25,"column_start":10,"column_end":10,"is_primary":false,"text":[{"text":" While","highlight_start":10,"highlight_end":10}],"label":"expected one of `(`, `,`, `=`, `{`, or `}`","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/lexer.rs","byte_start":281,"byte_end":283,"line_start":26,"line_end":26,"column_start":5,"column_end":7,"is_primary":true,"text":[{"text":" To","highlight_start":5,"highlight_end":7}],"label":"unexpected token","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"missing `,`","code":null,"level":"help","spans":[{"file_name":"src/lexer.rs","byte_start":276,"byte_end":276,"line_start":25,"line_end":25,"column_start":10,"column_end":10,"is_primary":true,"text":[{"text":" While","highlight_start":10,"highlight_end":10}],"label":null,"suggested_replacement":",","suggestion_applicability":"MaybeIncorrect","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[38;5;9merror\u001b[0m\u001b[0m\u001b[1m: expected one of `(`, `,`, `=`, `{`, or `}`, found `To`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/lexer.rs:26:5\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m25\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m While\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m-\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mexpected one of `(`, `,`, `=`, `{`, or `}`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mhelp: missing `,`\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m26\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m To\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9m^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9munexpected token\u001b[0m\n\n"} -{"message":"expected one of `(`, `,`, `=`, `{`, or `}`, found `Close`","code":null,"level":"error","spans":[{"file_name":"src/lexer.rs","byte_start":315,"byte_end":315,"line_start":30,"line_end":30,"column_start":9,"column_end":9,"is_primary":false,"text":[{"text":" Open","highlight_start":9,"highlight_end":9}],"label":"expected one of `(`, `,`, `=`, `{`, or `}`","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/lexer.rs","byte_start":320,"byte_end":325,"line_start":31,"line_end":31,"column_start":5,"column_end":10,"is_primary":true,"text":[{"text":" Close","highlight_start":5,"highlight_end":10}],"label":"unexpected token","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"missing `,`","code":null,"level":"help","spans":[{"file_name":"src/lexer.rs","byte_start":315,"byte_end":315,"line_start":30,"line_end":30,"column_start":9,"column_end":9,"is_primary":true,"text":[{"text":" Open","highlight_start":9,"highlight_end":9}],"label":null,"suggested_replacement":",","suggestion_applicability":"MaybeIncorrect","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[38;5;9merror\u001b[0m\u001b[0m\u001b[1m: expected one of `(`, `,`, `=`, `{`, or `}`, found `Close`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/lexer.rs:31:5\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m30\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m Open\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m-\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mexpected one of `(`, `,`, `=`, `{`, or `}`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mhelp: missing `,`\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m31\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m Close\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9m^^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9munexpected token\u001b[0m\n\n"} -{"message":"expected one of `,`, `=`, or `}`, found `ArithmeticOperator`","code":null,"level":"error","spans":[{"file_name":"src/lexer.rs","byte_start":367,"byte_end":367,"line_start":35,"line_end":35,"column_start":26,"column_end":26,"is_primary":false,"text":[{"text":" Literal(LiteralToken)","highlight_start":26,"highlight_end":26}],"label":"expected one of `,`, `=`, or `}`","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/lexer.rs","byte_start":372,"byte_end":390,"line_start":36,"line_end":36,"column_start":5,"column_end":23,"is_primary":true,"text":[{"text":" ArithmeticOperator(ArithmeticOperatorToken)","highlight_start":5,"highlight_end":23}],"label":"unexpected token","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"missing `,`","code":null,"level":"help","spans":[{"file_name":"src/lexer.rs","byte_start":367,"byte_end":367,"line_start":35,"line_end":35,"column_start":26,"column_end":26,"is_primary":true,"text":[{"text":" Literal(LiteralToken)","highlight_start":26,"highlight_end":26}],"label":null,"suggested_replacement":",","suggestion_applicability":"MaybeIncorrect","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[38;5;9merror\u001b[0m\u001b[0m\u001b[1m: expected one of `,`, `=`, or `}`, found `ArithmeticOperator`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/lexer.rs:36:5\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m35\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m Literal(LiteralToken)\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m-\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mexpected one of `,`, `=`, or `}`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mhelp: missing `,`\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m36\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m ArithmeticOperator(ArithmeticOperatorToken)\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9m^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9munexpected token\u001b[0m\n\n"} -{"message":"expected one of `,`, `=`, or `}`, found `Statement`","code":null,"level":"error","spans":[{"file_name":"src/lexer.rs","byte_start":415,"byte_end":415,"line_start":36,"line_end":36,"column_start":48,"column_end":48,"is_primary":false,"text":[{"text":" ArithmeticOperator(ArithmeticOperatorToken)","highlight_start":48,"highlight_end":48}],"label":"expected one of `,`, `=`, or `}`","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/lexer.rs","byte_start":420,"byte_end":429,"line_start":37,"line_end":37,"column_start":5,"column_end":14,"is_primary":true,"text":[{"text":" Statement(StatementToken)","highlight_start":5,"highlight_end":14}],"label":"unexpected token","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"missing `,`","code":null,"level":"help","spans":[{"file_name":"src/lexer.rs","byte_start":415,"byte_end":415,"line_start":36,"line_end":36,"column_start":48,"column_end":48,"is_primary":true,"text":[{"text":" ArithmeticOperator(ArithmeticOperatorToken)","highlight_start":48,"highlight_end":48}],"label":null,"suggested_replacement":",","suggestion_applicability":"MaybeIncorrect","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[38;5;9merror\u001b[0m\u001b[0m\u001b[1m: expected one of `,`, `=`, or `}`, found `Statement`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/lexer.rs:37:5\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m36\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m ArithmeticOperator(ArithmeticOperatorToken)\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m-\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mexpected one of `,`, `=`, or `}`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mhelp: missing `,`\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m37\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m Statement(StatementToken)\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9m^^^^^^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9munexpected token\u001b[0m\n\n"} -{"message":"expected one of `,`, `=`, or `}`, found `Bracket`","code":null,"level":"error","spans":[{"file_name":"src/lexer.rs","byte_start":445,"byte_end":445,"line_start":37,"line_end":37,"column_start":30,"column_end":30,"is_primary":false,"text":[{"text":" Statement(StatementToken)","highlight_start":30,"highlight_end":30}],"label":"expected one of `,`, `=`, or `}`","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/lexer.rs","byte_start":450,"byte_end":457,"line_start":38,"line_end":38,"column_start":5,"column_end":12,"is_primary":true,"text":[{"text":" Bracket(BracketToken)","highlight_start":5,"highlight_end":12}],"label":"unexpected token","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"missing `,`","code":null,"level":"help","spans":[{"file_name":"src/lexer.rs","byte_start":445,"byte_end":445,"line_start":37,"line_end":37,"column_start":30,"column_end":30,"is_primary":true,"text":[{"text":" Statement(StatementToken)","highlight_start":30,"highlight_end":30}],"label":null,"suggested_replacement":",","suggestion_applicability":"MaybeIncorrect","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[38;5;9merror\u001b[0m\u001b[0m\u001b[1m: expected one of `,`, `=`, or `}`, found `Bracket`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/lexer.rs:38:5\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m37\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m Statement(StatementToken)\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m-\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mexpected one of `,`, `=`, or `}`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mhelp: missing `,`\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m38\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m Bracket(BracketToken)\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9m^^^^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9munexpected token\u001b[0m\n\n"} -{"message":"expected one of `,`, `=`, or `}`, found `Variable`","code":null,"level":"error","spans":[{"file_name":"src/lexer.rs","byte_start":471,"byte_end":471,"line_start":38,"line_end":38,"column_start":26,"column_end":26,"is_primary":false,"text":[{"text":" Bracket(BracketToken)","highlight_start":26,"highlight_end":26}],"label":"expected one of `,`, `=`, or `}`","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/lexer.rs","byte_start":476,"byte_end":484,"line_start":39,"line_end":39,"column_start":5,"column_end":13,"is_primary":true,"text":[{"text":" Variable(variables::VariableToken)","highlight_start":5,"highlight_end":13}],"label":"unexpected token","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"missing `,`","code":null,"level":"help","spans":[{"file_name":"src/lexer.rs","byte_start":471,"byte_end":471,"line_start":38,"line_end":38,"column_start":26,"column_end":26,"is_primary":true,"text":[{"text":" Bracket(BracketToken)","highlight_start":26,"highlight_end":26}],"label":null,"suggested_replacement":",","suggestion_applicability":"MaybeIncorrect","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[38;5;9merror\u001b[0m\u001b[0m\u001b[1m: expected one of `,`, `=`, or `}`, found `Variable`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/lexer.rs:39:5\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m38\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m Bracket(BracketToken)\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m-\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mexpected one of `,`, `=`, or `}`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12mhelp: missing `,`\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m39\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m Variable(variables::VariableToken)\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9m^^^^^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9munexpected token\u001b[0m\n\n"} -{"message":"file not found for module `variables`","code":{"code":"E0583","explanation":"A file wasn't found for an out-of-line module.\n\nErroneous code example:\n\n```compile_fail,E0583\nmod file_that_doesnt_exist; // error: file not found for module\n\nfn main() {}\n```\n\nPlease be sure that a file corresponding to the module exists. If you\nwant to use a module named `file_that_doesnt_exist`, you need to have a file\nnamed `file_that_doesnt_exist.rs` or `file_that_doesnt_exist/mod.rs` in the\nsame directory.\n"},"level":"error","spans":[{"file_name":"src/lexer.rs","byte_start":0,"byte_end":18,"line_start":1,"line_end":1,"column_start":1,"column_end":19,"is_primary":true,"text":[{"text":"pub mod variables;","highlight_start":1,"highlight_end":19}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"to create the module `variables`, create file \"src/lexer/variables.rs\" or \"src/lexer/variables/mod.rs\"","code":null,"level":"help","spans":[],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[38;5;9merror[E0583]\u001b[0m\u001b[0m\u001b[1m: file not found for module `variables`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/lexer.rs:1:1\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m1\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0mpub mod variables;\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9m^^^^^^^^^^^^^^^^^^\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mhelp\u001b[0m\u001b[0m: to create the module `variables`, create file \"src/lexer/variables.rs\" or \"src/lexer/variables/mod.rs\"\u001b[0m\n\n"} -{"message":"cannot find type `VariableToken` in module `variables`","code":{"code":"E0412","explanation":"A used type name is not in scope.\n\nErroneous code examples:\n\n```compile_fail,E0412\nimpl Something {} // error: type name `Something` is not in scope\n\n// or:\n\ntrait Foo {\n fn bar(N); // error: type name `N` is not in scope\n}\n\n// or:\n\nfn foo(x: T) {} // type name `T` is not in scope\n```\n\nTo fix this error, please verify you didn't misspell the type name, you did\ndeclare it or imported it into the scope. Examples:\n\n```\nstruct Something;\n\nimpl Something {} // ok!\n\n// or:\n\ntrait Foo {\n type N;\n\n fn bar(_: Self::N); // ok!\n}\n\n// or:\n\nfn foo(x: T) {} // ok!\n```\n\nAnother case that causes this error is when a type is imported into a parent\nmodule. To fix this, you can follow the suggestion and use File directly or\n`use super::File;` which will import the types from the parent namespace. An\nexample that causes this error is below:\n\n```compile_fail,E0412\nuse std::fs::File;\n\nmod foo {\n fn some_function(f: File) {}\n}\n```\n\n```\nuse std::fs::File;\n\nmod foo {\n // either\n use super::File;\n // or\n // use std::fs::File;\n fn foo(f: File) {}\n}\n# fn main() {} // don't insert it for us; that'll break imports\n```\n"},"level":"error","spans":[{"file_name":"src/lexer.rs","byte_start":496,"byte_end":509,"line_start":39,"line_end":39,"column_start":25,"column_end":38,"is_primary":true,"text":[{"text":" Variable(variables::VariableToken)","highlight_start":25,"highlight_end":38}],"label":"not found in `variables`","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[0m\u001b[1m\u001b[38;5;9merror[E0412]\u001b[0m\u001b[0m\u001b[1m: cannot find type `VariableToken` in module `variables`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/lexer.rs:39:25\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m39\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m Variable(variables::VariableToken)\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9m^^^^^^^^^^^^^\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;9mnot found in `variables`\u001b[0m\n\n"} -{"message":"unused import: `std::fs`","code":{"code":"unused_imports","explanation":null},"level":"warning","spans":[{"file_name":"src/main.rs","byte_start":18,"byte_end":25,"line_start":2,"line_end":2,"column_start":5,"column_end":12,"is_primary":true,"text":[{"text":"use std::fs;","highlight_start":5,"highlight_end":12}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`#[warn(unused_imports)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"remove the whole `use` item","code":null,"level":"help","spans":[{"file_name":"src/main.rs","byte_start":14,"byte_end":26,"line_start":2,"line_end":2,"column_start":1,"column_end":13,"is_primary":true,"text":[{"text":"use std::fs;","highlight_start":1,"highlight_end":13}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused import: `std::fs`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/main.rs:2:5\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m2\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0muse std::fs;\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `#[warn(unused_imports)]` on by default\u001b[0m\n\n"} -{"message":"aborting due to 17 previous errors; 1 warning emitted","code":null,"level":"error","spans":[],"children":[],"rendered":"\u001b[0m\u001b[1m\u001b[38;5;9merror\u001b[0m\u001b[0m\u001b[1m: aborting due to 17 previous errors; 1 warning emitted\u001b[0m\n\n"} -{"message":"Some errors have detailed explanations: E0412, E0583.","code":null,"level":"failure-note","spans":[],"children":[],"rendered":"\u001b[0m\u001b[1mSome errors have detailed explanations: E0412, E0583.\u001b[0m\n"} -{"message":"For more information about an error, try `rustc --explain E0412`.","code":null,"level":"failure-note","spans":[],"children":[],"rendered":"\u001b[0m\u001b[1mFor more information about an error, try `rustc --explain E0412`.\u001b[0m\n"} diff --git a/kabel-rs/target/debug/deps/kabel_rs-b7a5db911f8343d3.d b/kabel-rs/target/debug/deps/kabel_rs-b7a5db911f8343d3.d deleted file mode 100644 index 10fe72e..0000000 --- a/kabel-rs/target/debug/deps/kabel_rs-b7a5db911f8343d3.d +++ /dev/null @@ -1,6 +0,0 @@ -/home/tm85/git/kabel/kabel-rs/target/debug/deps/kabel_rs-b7a5db911f8343d3: src/main.rs src/lexer.rs - -/home/tm85/git/kabel/kabel-rs/target/debug/deps/kabel_rs-b7a5db911f8343d3.d: src/main.rs src/lexer.rs - -src/main.rs: -src/lexer.rs: diff --git a/kabel-rs/target/debug/incremental/kabel_rs-2dfctajrnpnqg/s-gshw4oxylk-ugb9md-working/dep-graph.part.bin b/kabel-rs/target/debug/incremental/kabel_rs-2dfctajrnpnqg/s-gshw4oxylk-ugb9md-working/dep-graph.part.bin deleted file mode 100644 index 781cd6f03c53a7dd748a6363ae22fa1c723230a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 79399 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 S$)<~rqsKEoaBXp)ZT%1NvR^j< diff --git a/kabel-rs/target/debug/incremental/kabel_rs-2dfctajrnpnqg/s-gshw4oxylk-ugb9md.lock b/kabel-rs/target/debug/incremental/kabel_rs-2dfctajrnpnqg/s-gshw4oxylk-ugb9md.lock deleted file mode 100644 index e69de29..0000000 diff --git a/kabel-zig/build.zig b/kabel-zig/build.zig deleted file mode 100644 index 1c3929d..0000000 --- a/kabel-zig/build.zig +++ /dev/null @@ -1,91 +0,0 @@ -const std = @import("std"); - -// Although this function looks imperative, note that its job is to -// declaratively construct a build graph that will be executed by an external -// runner. -pub fn build(b: *std.Build) void { - // Standard target options allows the person running `zig build` to choose - // what target to build for. Here we do not override the defaults, which - // means any target is allowed, and the default is native. Other options - // for restricting supported target set are available. - const target = b.standardTargetOptions(.{}); - - // Standard optimization options allow the person running `zig build` to select - // between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall. Here we do not - // set a preferred release mode, allowing the user to decide how to optimize. - const optimize = b.standardOptimizeOption(.{}); - - const lib = b.addStaticLibrary(.{ - .name = "kabel-zig", - // In this case the main source file is merely a path, however, in more - // complicated build scripts, this could be a generated file. - .root_source_file = .{ .path = "src/root.zig" }, - .target = target, - .optimize = optimize, - }); - - // This declares intent for the library to be installed into the standard - // location when the user invokes the "install" step (the default step when - // running `zig build`). - b.installArtifact(lib); - - const exe = b.addExecutable(.{ - .name = "kabel-zig", - .root_source_file = .{ .path = "src/main.zig" }, - .target = target, - .optimize = optimize, - }); - - // This declares intent for the executable to be installed into the - // standard location when the user invokes the "install" step (the default - // step when running `zig build`). - b.installArtifact(exe); - - // This *creates* a Run step in the build graph, to be executed when another - // step is evaluated that depends on it. The next line below will establish - // such a dependency. - const run_cmd = b.addRunArtifact(exe); - - // By making the run step depend on the install step, it will be run from the - // installation directory rather than directly from within the cache directory. - // This is not necessary, however, if the application depends on other installed - // files, this ensures they will be present and in the expected location. - run_cmd.step.dependOn(b.getInstallStep()); - - // This allows the user to pass arguments to the application in the build - // command itself, like this: `zig build run -- arg1 arg2 etc` - if (b.args) |args| { - run_cmd.addArgs(args); - } - - // This creates a build step. It will be visible in the `zig build --help` menu, - // and can be selected like this: `zig build run` - // This will evaluate the `run` step rather than the default, which is "install". - const run_step = b.step("run", "Run the app"); - run_step.dependOn(&run_cmd.step); - - // Creates a step for unit testing. This only builds the test executable - // but does not run it. - const lib_unit_tests = b.addTest(.{ - .root_source_file = .{ .path = "src/root.zig" }, - .target = target, - .optimize = optimize, - }); - - const run_lib_unit_tests = b.addRunArtifact(lib_unit_tests); - - const exe_unit_tests = b.addTest(.{ - .root_source_file = .{ .path = "src/main.zig" }, - .target = target, - .optimize = optimize, - }); - - const run_exe_unit_tests = b.addRunArtifact(exe_unit_tests); - - // Similar to creating the run step earlier, this exposes a `test` step to - // the `zig build --help` menu, providing a way for the user to request - // running the unit tests. - const test_step = b.step("test", "Run unit tests"); - test_step.dependOn(&run_lib_unit_tests.step); - test_step.dependOn(&run_exe_unit_tests.step); -} diff --git a/kabel-zig/build.zig.zon b/kabel-zig/build.zig.zon deleted file mode 100644 index 826dca6..0000000 --- a/kabel-zig/build.zig.zon +++ /dev/null @@ -1,62 +0,0 @@ -.{ - .name = "kabel-zig", - // This is a [Semantic Version](https://semver.org/). - // In a future version of Zig it will be used for package deduplication. - .version = "0.0.0", - - // This field is optional. - // This is currently advisory only; Zig does not yet do anything - // with this value. - //.minimum_zig_version = "0.11.0", - - // This field is optional. - // Each dependency must either provide a `url` and `hash`, or a `path`. - // `zig build --fetch` can be used to fetch all dependencies of a package, recursively. - // Once all dependencies are fetched, `zig build` no longer requires - // internet connectivity. - .dependencies = .{ - // See `zig fetch --save ` for a command-line interface for adding dependencies. - //.example = .{ - // // When updating this field to a new URL, be sure to delete the corresponding - // // `hash`, otherwise you are communicating that you expect to find the old hash at - // // the new URL. - // .url = "https://example.com/foo.tar.gz", - // - // // This is computed from the file contents of the directory of files that is - // // obtained after fetching `url` and applying the inclusion rules given by - // // `paths`. - // // - // // This field is the source of truth; packages do not come from a `url`; they - // // come from a `hash`. `url` is just one of many possible mirrors for how to - // // obtain a package matching this `hash`. - // // - // // Uses the [multihash](https://multiformats.io/multihash/) format. - // .hash = "...", - // - // // When this is provided, the package is found in a directory relative to the - // // build root. In this case the package's hash is irrelevant and therefore not - // // computed. This field and `url` are mutually exclusive. - // .path = "foo", - //}, - }, - - // Specifies the set of files and directories that are included in this package. - // Only files and directories listed here are included in the `hash` that - // is computed for this package. - // Paths are relative to the build root. Use the empty string (`""`) to refer to - // the build root itself. - // A directory listed here means that all files within, recursively, are included. - .paths = .{ - // This makes *all* files, recursively, included in this package. It is generally - // better to explicitly list the files and directories instead, to insure that - // fetching from tarballs, file system paths, and version control all result - // in the same contents hash. - "", - // For example... - //"build.zig", - //"build.zig.zon", - //"src", - //"LICENSE", - //"README.md", - }, -} diff --git a/kabel-zig/src/lexer.zig b/kabel-zig/src/lexer.zig deleted file mode 100644 index 6d45186..0000000 --- a/kabel-zig/src/lexer.zig +++ /dev/null @@ -1,4 +0,0 @@ -const std = @import("std"); -const lexutils = @import("lexutils.zig"); - -pub fn lexer( diff --git a/kabel-zig/src/lexutil.zig b/kabel-zig/src/lexutil.zig deleted file mode 100644 index f788560..0000000 --- a/kabel-zig/src/lexutil.zig +++ /dev/null @@ -1,45 +0,0 @@ -const variables = @import("variables.zig"); - -const ArithmeticOperatorToken = enum { - Add, // + - Subtract, // - - Multiply, // * - Divide, // / - Exponentiate, // ^ - Modulus, // % -}; - -const BooleanOperatorToken = enum { - And, - Or, -}; - -const LiteralToken = union(enum) { - String: struct { // String (up to 256 chars) - value: [256]u8, - }, - Nuumber: struct { // Equivalent to TS 'Number' - value: f64, - }, -}; - -const StatementToken = enum { - If, // if - Foreach, // foreach [ of] : (block) - While, // while : (block) - To, // to [with ]: (block) -}; - -const BracketToken = enum { - Open, // ( - Close, // ) -}; - -pub const Token = union(enum) { - Literal: LiteralToken, - ArithmeticOperator: ArithmeticOperatorToken, - BooleanOperator: BooleanOperatorToken, - Statement: StatementToken, - Bracket: BracketToken, - Variable: variables.VariableToken, -}; diff --git a/kabel-zig/src/main.zig b/kabel-zig/src/main.zig deleted file mode 100644 index 3798875..0000000 --- a/kabel-zig/src/main.zig +++ /dev/null @@ -1,20 +0,0 @@ -const std = @import("std"); -const lexer = @import("lexer.zig"); - -pub fn main() !u8 { - const stdout_fd = std.io.getStdOut().writer(); - var bw = std.io.bufferedWriter(stdout_fd); - const stdout = bw.writer(); - - try stdout.print("Run `zig build test` to run the tests.\n", .{}); - - try bw.flush(); // don't forget to flush! - return 0; -} - -//test "simple test" { -// var list = std.ArrayList(i32).init(std.testing.allocator); -// defer list.deinit(); // try commenting this out and see if zig detects the memory leak! -// try list.append(42); -// try std.testing.expectEqual(@as(i32, 42), list.pop()); -//} diff --git a/kabel-zig/src/modules.zig b/kabel-zig/src/modules.zig deleted file mode 100644 index 8775cd7..0000000 --- a/kabel-zig/src/modules.zig +++ /dev/null @@ -1,8 +0,0 @@ -pub const Modules = union(enum) { - Thruster: struct { - on: -}; - -pub const ModuleVar = union(enum) { - -}; diff --git a/kabel-zig/src/root.zig b/kabel-zig/src/root.zig deleted file mode 100644 index ecfeade..0000000 --- a/kabel-zig/src/root.zig +++ /dev/null @@ -1,10 +0,0 @@ -const std = @import("std"); -const testing = std.testing; - -export fn add(a: i32, b: i32) i32 { - return a + b; -} - -test "basic add functionality" { - try testing.expect(add(3, 7) == 10); -} diff --git a/kabel-zig/src/variables.zig b/kabel-zig/src/variables.zig deleted file mode 100644 index e7044ce..0000000 --- a/kabel-zig/src/variables.zig +++ /dev/null @@ -1,7 +0,0 @@ -const modules = @import("modules.zig"); - -pub const VariableToken = union(enum) { - Module: modules.ModuleVar, - Number: f64, - String: [256]u8, -}; diff --git a/kabel.py b/kabel.py deleted file mode 100644 index 2a7a1a7..0000000 --- a/kabel.py +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/env python3 - -import sys, enum - -class ModuleType(enum.Enum): - Basic = - Thruster = enum.auto() - Hub = enum.auto() - -class TokenType(enum.Enum): - Declarator = enum.auto() - Arithmetic = enum.auto() - Literal = enum.auto() - Variable = enum.auto() - - - -KEYWORDS = [ - "if", # if - "to", # function definition - "using", # arg introducers - "by", # " - "with", # " - "foreach", # for - "it" # iterator -] - -STATEMENT_CLASSIFIERS = [ - "if", - "to", - "foreach" -] - -KEYWORDS_ACCEPT = { - "if": -} - -mem = { - "w": [], # Current word being processed - "stno": 0, # Number of statement being processed - "next": 0, - "if": - "cvl": 0, # Convolution level (paren depth) -} -program = [] - -with open(sys.argv[1]) as f: - prg = f.read().split(";") - - -def lexer(prg): - for statement in prg: # For statement in program - mem["stno"] = 0 - mem["w"] = "" - for char in list(statement): - if char == " " && !mem[""]: - # On spaces or new lines, begin a new word - mem["w"] = "" - continue - else if char == "(": - cvl - else: - mem["w"] += char - - #match mem["w"]: - # case "if": - # # Now parsing an if statement - # mem["if"]["active"] = True - # case - if mem["w"] in STATEMENT_CLASSIFIERS: - # Activate mode specified by word - # If mem["w"] is 'if', enable if mode - mem[mem["w"]]["active"] = True - - diff --git a/kabel/Cargo.toml b/kabel/Cargo.toml new file mode 100644 index 0000000..070f3fe --- /dev/null +++ b/kabel/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "kabel" +version = "0.1.0" +edition = "2021" +authors = ["tm85 ", "core ", "ghostly_zsh "] +description = "A dead-simple scripting language for use in games" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +libkabel = { version = "0.1", path = "../libkabel" } \ No newline at end of file diff --git a/kabel-rs/src/main.rs b/kabel/src/main.rs similarity index 83% rename from kabel-rs/src/main.rs rename to kabel/src/main.rs index ad3e1ec..7d8b432 100644 --- a/kabel-rs/src/main.rs +++ b/kabel/src/main.rs @@ -1,13 +1,8 @@ -use lexutil::Token; use std::env; use std::error::Error; use std::fs::File; use std::io::{self, Read}; - -mod lexer; -mod lexutil; -mod modules; -mod variables; +use libkabel::lexutil::Token; fn main() -> Result<(), Box> { let argv: Vec = env::args().collect(); @@ -33,10 +28,9 @@ fn main() -> Result<(), Box> { let mut text_source = String::new(); source_fd.read_to_string(&mut text_source)?; - dbg!(&text_source); // Lex! - let lexed: Vec = match lexer::lexer(&text_source) { + let lexed: Vec = match libkabel::lexer::lexer(&text_source) { Err(e) => { eprintln!("Lexer fail with {}", e); std::process::exit(1); @@ -44,7 +38,5 @@ fn main() -> Result<(), Box> { Ok(lexed) => lexed, }; - dbg!(lexed.len(), lexed); - Ok(()) } diff --git a/kabel-rs/Cargo.toml b/libkabel/Cargo.toml similarity index 82% rename from kabel-rs/Cargo.toml rename to libkabel/Cargo.toml index 39cceab..135642e 100644 --- a/kabel-rs/Cargo.toml +++ b/libkabel/Cargo.toml @@ -1,8 +1,9 @@ [package] -name = "kabel-rs" +name = "libkabel" version = "0.1.0" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +tracing = "0.1" \ No newline at end of file diff --git a/libkabel/src/errors.rs b/libkabel/src/errors.rs new file mode 100644 index 0000000..6f3c8d1 --- /dev/null +++ b/libkabel/src/errors.rs @@ -0,0 +1,3 @@ +pub enum Error { + +} \ No newline at end of file diff --git a/kabel-rs/src/lexer.rs b/libkabel/src/lexer.rs similarity index 97% rename from kabel-rs/src/lexer.rs rename to libkabel/src/lexer.rs index 4e2d281..07b8ffd 100644 --- a/kabel-rs/src/lexer.rs +++ b/libkabel/src/lexer.rs @@ -1,6 +1,7 @@ use crate::lexutil; use lexutil::{ArithOperator, Bracket, Literal, Statement, Token}; use std::error::Error; +use tracing::debug; #[derive(Debug)] enum State { @@ -11,7 +12,7 @@ enum State { } pub fn lexer(text_source: &str) -> Result, Box> { - println!("Lexing!"); + debug!("lexing!"); let mut current_token = String::new(); let mut lexed = Vec::new(); @@ -31,7 +32,6 @@ pub fn lexer(text_source: &str) -> Result, Box> { // If next char is an unescaped quote if let Some(c_peek) = chars.peek() { if c != '\\' && *c_peek == '\"' { - dbg!("hi"); chars.next(); current_token.push(c); let tok_cpy = current_token.clone(); @@ -42,7 +42,6 @@ pub fn lexer(text_source: &str) -> Result, Box> { current_token.push(c); } } else { - dbg!("h"); continue; // we're at the end. we should bring a user error // because this string was not properly delimited } @@ -145,7 +144,7 @@ pub fn lexer(text_source: &str) -> Result, Box> { } } } - dbg!(&c, &state, ¤t_token, &lexed); + debug!("{} {:?} {} {:?}", &c, &state, ¤t_token, &lexed); } Ok(lexed) diff --git a/kabel-rs/src/lexutil.rs b/libkabel/src/lexutil.rs similarity index 100% rename from kabel-rs/src/lexutil.rs rename to libkabel/src/lexutil.rs diff --git a/libkabel/src/lib.rs b/libkabel/src/lib.rs new file mode 100644 index 0000000..e2974be --- /dev/null +++ b/libkabel/src/lib.rs @@ -0,0 +1,5 @@ +pub mod errors; +pub mod lexer; +pub mod lexutil; +pub mod modules; +pub mod variables; \ No newline at end of file diff --git a/kabel-rs/src/modules.rs b/libkabel/src/modules.rs similarity index 100% rename from kabel-rs/src/modules.rs rename to libkabel/src/modules.rs diff --git a/kabel-rs/src/variables.rs b/libkabel/src/variables.rs similarity index 100% rename from kabel-rs/src/variables.rs rename to libkabel/src/variables.rs