From dbd3ff2acd9ffe33eae155abcaa26521ce88ccae Mon Sep 17 00:00:00 2001 From: Zander Thannhauser Date: Sun, 3 Aug 2025 23:03:48 -0500 Subject: [PATCH] handle decimals --- .gitignore | 1 + flake.nix | 2 +- main.c | 16 +++++++++++++++- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 451efb9..d0025de 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .direnv/ bin/ outputs/ +*.swp diff --git a/flake.nix b/flake.nix index adb1973..7234052 100644 --- a/flake.nix +++ b/flake.nix @@ -39,7 +39,7 @@ pname = "qc"; version = "1.0"; src = ./.; - nativeBuildInputs = with pkgs; [ gcc gnumake readline.dev gmp.dev ]; + nativeBuildInputs = with pkgs; [ gcc gnumake ]; buildInputs = with pkgs; [ readline.dev gmp.dev ]; }; }); diff --git a/main.c b/main.c index 653ceee..855a83f 100644 --- a/main.c +++ b/main.c @@ -377,7 +377,20 @@ struct value* scan(const char* text) { mpq_t factor; mpq_init(factor); - TODO; + moving++; + + mpq_set_si(factor, 1, 10); + + while ('0' <= *moving && *moving <= '9') + { + mpq_set_si(tmp, *moving++ - '0', 1); + + mpq_mul(tmp, factor, tmp); + + mpq_add(value, value, tmp); + + mpq_div(factor, factor, base); + } mpq_clear(factor); } @@ -570,6 +583,7 @@ struct expression* parse(const char* text) while (false || *moving == '_' + || *moving == '.' || ('0' <= *moving && *moving <= '9')) { append(*moving++);