关于人在不想干正事的时候能干出啥来。。。
第一次记录:2024年12月24日丑时

有不少 Bug,稳定性可能不是很好,但是很爽!(比如优先级问题)
项目结构如下!
MrMath ├─ ... ├─ Cargo.lock ├─ Cargo.toml └─ src ├─ backend │ ├─ ast.rs │ ├─ bigint │ │ ├─ fraction.rs │ │ ├─ matrix.rs │ │ └─ mod.rs │ ├─ driver.rs │ ├─ interpreter │ │ └─ mod.rs │ ├─ mod.rs │ └─ parser │ ├─ mod.rs │ └─ token.pest ├─ basic ├─ frontend │ ├─ help.rs │ ├─ history.rs │ ├─ mod.rs │ └─ service.rs ├─ hello.rs └─ main.rs
|
其中 token.pest 文件如下:
WHITE_SPACE = _{ " " | "\t" | "\r" } GRAMMAR = { SOI ~ TRANS_UNIT ~ EOI } NEWLINE = _{ "\n" }
TRANS_UNIT = { BLOCK }
BLOCK = { STMT* } STMT = { VAR_STMT | EXPR_STMT | PRINT_STMT }
VAR_STMT = { VAR ~ WHITE_SPACE* ~ ID ~ WHITE_SPACE* ~ "=" ~ WHITE_SPACE* ~ TYPE ~ WHITE_SPACE* ~ EXPR ~ WHITE_SPACE* ~ ";" }
EXPR_STMT = { EXPR ~ WHITE_SPACE* } PRINT_STMT = { "print" ~ WHITE_SPACE* ~ EXPR ~ WHITE_SPACE* ~ ";" }
ID = { ASCII_ALPHA ~ ASCII_ALPHA_NUM* } ASCII_ALPHA_NUM = { ASCII_ALPHA | ASCII_DIGIT } EXPR = { ATOM_EXPR ~ (INFIX_OPS ~ ATOM_EXPR)* } PREFIX_OPS = { (WHITE_SPACE* ~ PREFIX_OP)* ~ WHITE_SPACE* } POSTFIX_OPS = { (WHITE_SPACE* ~ POSTFIX_OP)* } INFIX_OPS = { WHITE_SPACE* ~ INFIX_OP ~ WHITE_SPACE*} ATOM_EXPR = { PREFIX_OPS ~ PRIMARY_EXPR ~ POSTFIX_OPS } PRIMARY_EXPR = { INTEGER | FRACTION | VECTOR | MATRIX | "(" ~ WHITE_SPACE* ~ EXPR ~ WHITE_SPACE* ~ ")" } EXPR_SHORT = { ATOM_EXPR_SHORT ~ (INFIX_OPS ~ ATOM_EXPR_SHORT)* } ATOM_EXPR_SHORT = { PREFIX_OPS ~ PRIMARY_EXPR ~ POSTFIX_OPS } PRIMARY_EXPR_SHORT = { INTEGER | FRACTION }
TYPE = { INT_TYPE | FRAC_TYPE | VECTOR_TYPE | MATRIX_TYPE } INT_TYPE = { "Int" } FRAC_TYPE = { "Frac" } MATRIX_TYPE = { "Mat" | "Matrix" } VECTOR_TYPE = { "Vec" | "Vector" }
PREFIX_OP = { "abs" | "+" | "-" } POSTFIX_OP = { "!" | "^T" } INFIX_OP = { MOD_OP | MUL_OP | ADD_OP } MOD_OP = { "%" | "**" } MUL_OP = { "*" | "//" } ADD_OP = { "+" | "-" }
INTEGER = { ASCII_DIGIT+ }
FRACTION = { "Frac" ~ "[" ~ WHITE_SPACE* ~ INTEGER ~ WHITE_SPACE* ~ "," ~ WHITE_SPACE* ~ INTEGER ~ WHITE_SPACE* ~ "]" } MATRIX = { "Mat" ~ "[" ~ WHITE_SPACE* ~ MATRIX_ROWS ~ WHITE_SPACE* ~ "]" } MATRIX_ROWS = { VECTOR_ROW ~ (WHITE_SPACE* ~ "," ~ WHITE_SPACE* ~ VECTOR_ROW)* } VECTOR = { "Vec" ~ VECTOR_ROW }
VECTOR_ROW = { "[" ~ WHITE_SPACE* ~ INTEGER ~ (WHITE_SPACE* ~ "," ~ WHITE_SPACE* ~ INTEGER)* ~ WHITE_SPACE* ~ "]" }
VAR = { "var" }
|
设计还很不完善,但是已经可以运行了,不枉三天功夫。
乐,明天早上还要交 代数 作业,,,
第二次记录:2024年12月28日子时
A Math Calculator implementation in Rust.
MrMath = My Rust Math Calculator
MrMath ├─ Cargo.lock ├─ Cargo.toml └─ src ├─ backend │ ├─ bigint │ │ ├─ fraction.rs │ │ ├─ matrix.rs │ │ └─ mod.rs │ ├─ driver.rs │ ├─ interpreter │ │ ├─ interpreter.rs │ │ └─ mod.rs │ ├─ mod.rs │ ├─ parser │ │ ├─ mod.rs │ │ └─ token.pest │ └─ structure │ ├─ ast.rs │ └─ mod.rs ├─ basic ├─ files │ ├─ manual │ │ ├─ fraction.txt │ │ ├─ integer.txt │ │ ├─ matrix.txt │ │ ├─ variable.txt │ │ └─ vector.txt │ └─ tables │ └─ keywords.txt ├─ frontend │ ├─ check.rs │ ├─ help.rs │ ├─ history.rs │ ├─ mod.rs │ └─ service.rs ├─ hello.rs └─ main.rs
|
添加了不少功能,实现了变量和常量,定义更加灵活,支持整数、分数、向量和矩阵的运算,分数、向量和矩阵的定义中可以包含部分复杂的表达式。

该去回头学理论泡论文写开题报告力。。。
估计后面会有一长段时间不碰这个了。