Ajout des instructions.
This commit is contained in:
44
src/main.rs
44
src/main.rs
@@ -2,7 +2,7 @@ use std::{env, fs, io};
|
||||
use std::io::Write;
|
||||
use std::process;
|
||||
use crate::astprinter::ASTPrinter;
|
||||
use crate::expr::{ExprVisitor, Literal};
|
||||
use crate::expr::ExprVisitor;
|
||||
use crate::interpreter::Interpreter;
|
||||
use crate::parser::Parser;
|
||||
|
||||
@@ -13,8 +13,10 @@ mod token_type;
|
||||
mod expr;
|
||||
mod astprinter;
|
||||
mod parser;
|
||||
mod stmt;
|
||||
|
||||
use crate::scanner::Scanner;
|
||||
use crate::stmt::{Statement, StatementVisitor};
|
||||
|
||||
// Exit codes from #include <sysexits.h>
|
||||
const EX_OK: i32 = 0;
|
||||
@@ -71,26 +73,24 @@ fn run(src: String) -> i32 {
|
||||
|
||||
println!("Parser");
|
||||
let mut parser = Parser::new( scanner.tokens );
|
||||
match parser.parse() {
|
||||
Some(expr) => {
|
||||
println!("AST");
|
||||
let mut printer = ASTPrinter { depth: 0 };
|
||||
printer.visit_expr(&expr);
|
||||
println!("Interpretation");
|
||||
let mut interpreter = Interpreter;
|
||||
let result = interpreter.visit_expr(&expr);
|
||||
match result {
|
||||
Ok(r) => { match r {
|
||||
Literal::LiteralNumber(f) => { println!("Resultat numérique = {}", f); }
|
||||
Literal::LiteralString(s) => { println!("Résultat chaîne = {}", s); }
|
||||
Literal::LiteralBool(b) => { println!("Résultat booléen = {}", b); }
|
||||
Literal::LiteralNil => { println!("Résultat nul")}
|
||||
}}
|
||||
Err(e) => { println!("Erreur d'exécution : {}", e.message); return EX_EXECERR; }
|
||||
}
|
||||
println!();
|
||||
},
|
||||
None => { println!("An error occurred while parsing expression."); return EX_DATAERR; }
|
||||
let program = parser.parse();
|
||||
|
||||
println!("AST");
|
||||
let mut printer = ASTPrinter { depth: 0 };
|
||||
for s in program.clone() {
|
||||
match s {
|
||||
Statement::Expression(e) => { printer.visit_expr_stmt(&e) }
|
||||
Statement::Print(p) => { printer.visit_print(&p) }
|
||||
}
|
||||
}
|
||||
|
||||
println!("Interpretation");
|
||||
let mut interpreter = Interpreter;
|
||||
for s in program {
|
||||
match s {
|
||||
Statement::Expression(e) => { interpreter.visit_expr_stmt(&e) }
|
||||
Statement::Print(p) => { interpreter.visit_print(&p) }
|
||||
}
|
||||
}
|
||||
|
||||
EX_OK
|
||||
@@ -101,4 +101,4 @@ fn run(src: String) -> i32 {
|
||||
// https://github.com/munificent/craftinginterpreters/wiki/Lox-implementations#rust
|
||||
|
||||
// Pause :
|
||||
// http://www.craftinginterpreters.com/statements-and-state.html
|
||||
// http://www.craftinginterpreters.com/statements-and-state.html#global-variables
|
||||
|
||||
Reference in New Issue
Block a user