Ajout des instructions.

This commit is contained in:
2024-05-21 08:44:11 +02:00
parent 3e27109d2a
commit de653f9bc5
6 changed files with 118 additions and 30 deletions

View File

@@ -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