用rust写一个玩具解释器10(parser)
介绍完中缀和前缀表达式 那么今天就把parser的代码全部贴出来 可跳过 use crate::ast::ast::ASTNode; use crate::ast::ast; use crate::mylexer::lexer; use crate::token::token; use std::collections::HashMap; pub enum Pri { LOWEST, ASSIGN , // 赋值 EQUALS , // ==, != LESSGREATER , // < ,> SUM , //+,- PRODUCT ,//*,/ PREFIX , // !,- CALL , // func() INDEX, // array[0], map[0] } macro_rules! get_pri { ($x:ident) => { Pri::$x as i8 }; } //这里嘛, 现在还没有更好的办法解决... fn get_precedence(t: token::TokenType) ->i8 { let map: HashMap<token::TokenType,i8> = { let mut mmap = HashMap::new(); mmap.insert(token::EQ, get_pri!(EQUALS)); mmap.insert(token: