liftoff
This commit is contained in:
commit
eb23e06fec
9 changed files with 84 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
/target
|
7
Cargo.lock
generated
Normal file
7
Cargo.lock
generated
Normal file
|
@ -0,0 +1,7 @@
|
|||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "riscv_interpreter"
|
||||
version = "0.1.0"
|
4
Cargo.toml
Normal file
4
Cargo.toml
Normal file
|
@ -0,0 +1,4 @@
|
|||
[package]
|
||||
name = "riscv_interpreter"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
3
src/env.rs
Normal file
3
src/env.rs
Normal file
|
@ -0,0 +1,3 @@
|
|||
|
||||
|
||||
pub enum Env {}
|
39
src/err.rs
Normal file
39
src/err.rs
Normal file
|
@ -0,0 +1,39 @@
|
|||
use std::fmt::{self, Display, Formatter};
|
||||
|
||||
pub enum SyntaxErr {
|
||||
TraillingComma,
|
||||
UnmatchedParen,
|
||||
}
|
||||
|
||||
impl Display for SyntaxErr {
|
||||
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
|
||||
match self {
|
||||
SyntaxErr::TraillingComma => write!(f, "trailling comma"),
|
||||
SyntaxErr::UnmatchedParen => write!(f, "unmatched parenthesis"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub enum RuntimeErr {
|
||||
InvalidRegister(String),
|
||||
UnexpectedImmediate,
|
||||
UnexpectedRegister,
|
||||
InvalidOp(String),
|
||||
InvalidOpArity(String, usize, usize),
|
||||
}
|
||||
|
||||
impl Display for RuntimeErr {
|
||||
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
|
||||
match self {
|
||||
RuntimeErr::InvalidRegister(reg) => write!(f, "invalid register {}", reg),
|
||||
RuntimeErr::UnexpectedImmediate => write!(f, "unexpected immediate"),
|
||||
RuntimeErr::UnexpectedRegister => write!(f, "unexpected register"),
|
||||
RuntimeErr::InvalidOp(op) => write!(f, "invalid operation {}", op),
|
||||
RuntimeErr::InvalidOpArity(op, expected, actual) => write!(
|
||||
f,
|
||||
"invalid operation arity {} expected {} got {}",
|
||||
op, expected, actual
|
||||
),
|
||||
}
|
||||
}
|
||||
}
|
3
src/lib.rs
Normal file
3
src/lib.rs
Normal file
|
@ -0,0 +1,3 @@
|
|||
pub mod env;
|
||||
pub mod err;
|
||||
pub mod parser;
|
3
src/main.rs
Normal file
3
src/main.rs
Normal file
|
@ -0,0 +1,3 @@
|
|||
fn main() {
|
||||
println!("Hello, world!");
|
||||
}
|
23
src/parser.rs
Normal file
23
src/parser.rs
Normal file
|
@ -0,0 +1,23 @@
|
|||
pub enum Expr {
|
||||
/// 1, 2, -1
|
||||
Immediate(i64),
|
||||
/// zero, r1, pc
|
||||
Register(String),
|
||||
/// add, xor, j
|
||||
Op(Vec<Expr>),
|
||||
/// <label>:
|
||||
LabelDef(String),
|
||||
/// j <label>
|
||||
LabelRef(String),
|
||||
}
|
||||
|
||||
pub struct Location {
|
||||
pub line: usize,
|
||||
pub col: usize,
|
||||
pub start: usize,
|
||||
pub end: usize,
|
||||
}
|
||||
|
||||
pub fn parse(input: &str) -> Result<Expr, ()> {
|
||||
todo!()
|
||||
}
|
1
test.s
Normal file
1
test.s
Normal file
|
@ -0,0 +1 @@
|
|||
add r1 r2 r1
|
Loading…
Reference in a new issue