From 2c4f15ada136d19e20793cb9bf2ff0bd51a7cd08 Mon Sep 17 00:00:00 2001 From: Hatter Jiang Date: Wed, 6 May 2020 00:30:57 +0800 Subject: [PATCH] add context --- src/context.rs | 21 +++++++++++++++++++++ src/ins.rs | 1 - src/main.rs | 11 ++++++++++- 3 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 src/context.rs diff --git a/src/context.rs b/src/context.rs new file mode 100644 index 0000000..026239d --- /dev/null +++ b/src/context.rs @@ -0,0 +1,21 @@ +use std::collections::HashMap; + +#[derive(Debug)] +pub struct Context { + ptr: isize, + stack: Vec, + label_map: HashMap, + mem_map: HashMap, +} + +impl Context { + + pub fn new() -> Self { + Self { + ptr: 0, + stack: vec![], + label_map: HashMap::new(), + mem_map: HashMap::new(), + } + } +} \ No newline at end of file diff --git a/src/ins.rs b/src/ins.rs index f220f17..5a72716 100644 --- a/src/ins.rs +++ b/src/ins.rs @@ -1,5 +1,4 @@ - #[derive(Debug)] pub enum InsId { Push, // has data diff --git a/src/main.rs b/src/main.rs index 745c4bc..c1c927f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,8 +1,10 @@ mod err; mod ins; +mod context; use err::*; use ins::*; +use context::*; const VALID_INSTRUCTION_CHARS: &str = "草泥马河蟹"; @@ -11,7 +13,14 @@ const VALID_INSTRUCTION_CHARS: &str = "草泥马河蟹"; fn main() { let input = "草草草泥马 马草草草泥草草草草泥泥马 草马草 泥马草泥 草草草泥草泥草马 泥马草草 草草草泥马 泥草草草 草马草 草草草泥草泥泥马 泥草草泥 马泥草草泥草草草泥草泥马 马草马草泥草草草草泥泥马 马草草草泥草草草泥草泥马 草马马 马马马"; - parse_lang(input).ok(); + let _instructions = match parse_lang(input) { + Ok(i) => i, Err(err) => { + println!("Parse error: {}", err); + return; + }, + }; + + let _context = Context::new(); } fn parse_lang(lang: &str) -> Result, ParseError> {