Implement debug print
This commit is contained in:
parent
d035724d20
commit
3dacee0be4
@ -22,8 +22,11 @@ impl Interpreter {
|
||||
for stmt in prog.prog {
|
||||
match stmt {
|
||||
Stmt::Expr(expr) => {
|
||||
self.resolve_expr(expr);
|
||||
}
|
||||
Stmt::DbgPrint(expr) => {
|
||||
let result = self.resolve_expr(expr);
|
||||
println!("Result = {:?}", result);
|
||||
println!("{:?}", result);
|
||||
}
|
||||
Stmt::Let(name, rhs) => {
|
||||
let result = self.resolve_expr(rhs);
|
||||
|
||||
@ -22,6 +22,9 @@ pub enum Token {
|
||||
/// Identifier (variable / function / ... name)
|
||||
Ident(String),
|
||||
|
||||
/// Dollar sign ($)
|
||||
Dollar,
|
||||
|
||||
/// Let identifier (let)
|
||||
Let,
|
||||
|
||||
@ -175,6 +178,7 @@ impl<'a> Lexer<'a> {
|
||||
';' => tokens.push(Token::Semicolon),
|
||||
'{' => tokens.push(Token::LBrace),
|
||||
'}' => tokens.push(Token::RBrace),
|
||||
'$' => tokens.push(Token::Dollar),
|
||||
|
||||
'a'..='z' | 'A'..='Z' | '_' => {
|
||||
let mut ident = String::from(ch);
|
||||
|
||||
@ -75,6 +75,7 @@ pub enum Stmt {
|
||||
Let(String, Expr),
|
||||
While(Expr, Ast),
|
||||
If(Expr, Ast, Ast),
|
||||
DbgPrint(Expr),
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq, Eq, Clone)]
|
||||
@ -108,7 +109,8 @@ stmt_expr = expr
|
||||
stmt_let = "let" IDENT "=" expr
|
||||
stmt_while = "while" expr "{" (stmt)* "}"
|
||||
stmt_if = "if" expr "{" (stmt)* "}" ( "else" "{" (stmt)* "}" )
|
||||
stmt = stmt_expr | stmt_let | stmt_while | stmt_if
|
||||
stmt_dbgprint = "$" expr
|
||||
stmt = stmt_expr | stmt_let | stmt_while | stmt_if | stmt_dbgprint
|
||||
*/
|
||||
|
||||
struct Parser<T: Iterator<Item = Token>> {
|
||||
@ -136,6 +138,10 @@ impl<T: Iterator<Item = Token>> Parser<T> {
|
||||
Token::Let => self.parse_let_stmt(),
|
||||
Token::While => self.parse_while(),
|
||||
Token::If => self.parse_if(),
|
||||
Token::Dollar => {
|
||||
self.next();
|
||||
Stmt::DbgPrint(self.parse_expr())
|
||||
}
|
||||
// By default try to parse an expression
|
||||
_ => Stmt::Expr(self.parse_expr()),
|
||||
};
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user