2025-05-07 09:19:33 -07:00
|
|
|
/* Mycelium Scheme
|
|
|
|
|
* Copyright (C) 2025 Ava Affine
|
|
|
|
|
*
|
|
|
|
|
* This program is free software: you can redistribute it and/or modify
|
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
|
|
|
* (at your option) any later version.
|
|
|
|
|
*
|
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
|
*
|
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#![cfg_attr(not(test), no_std)]
|
|
|
|
|
#![feature(let_chains)]
|
|
|
|
|
#![feature(iter_collect_into)]
|
2025-05-19 14:38:11 -07:00
|
|
|
#![feature(if_let_guard)]
|
2025-05-21 14:58:42 -07:00
|
|
|
#![feature(core_float_math)]
|
2025-05-07 09:19:33 -07:00
|
|
|
|
|
|
|
|
pub mod sexpr;
|
|
|
|
|
pub mod lexer;
|
Number library and integrations
This commit adds a number library which handles fractions, floats,
whole numbers, scientific notation, and special symbolic numbers
all according to the R7RS small specification.
Numeric trait is used to abstract operations across all number types
and a Number enum is used to offer a non-opaque type that stores any
kind of number.
Upon the Number enum is implemented the following traits:
- Add, Div, Sub, Mul
- Pow
- PartialEq
- PartialOrd
Which then offer the following operators to use on the Number enum
instances themselves: + - / * == != < > <= >= and of course x.pow(y).
Additionally, the number package contains parsing logic for each type
of number. FromStr is implemented as part of the Numeric trait, and
then in turn implemented on Number. Additionally Into<String> is
implemented for the Numeric trait and then on the Number enum type
as well.
Test cases have been added for basic cases, but could be expanded.
Additional modifications:
- LexError has a custom display implementation that properly outputs
formatted errors.
- Sexpr package updated to use new number package
Signed-off-by: Ava Affine <ava@sunnypup.io>
2025-05-15 12:49:08 -07:00
|
|
|
pub mod parser;
|
|
|
|
|
pub mod number;
|
2025-05-28 11:54:40 -07:00
|
|
|
pub mod stackstack;
|
2025-05-07 09:19:33 -07:00
|
|
|
|
|
|
|
|
extern crate alloc;
|