diff --git a/src/cli/tokenize.rs b/src/cli/tokenize.rs index 0691e5b..8fb3706 100644 --- a/src/cli/tokenize.rs +++ b/src/cli/tokenize.rs @@ -1,15 +1,14 @@ use serde::Serialize; use crate::{ - error_handling::MistiError, - lexic::{get_tokens, token::Token}, - syntax::build_ast, + error_handling::MistiError, lexic::{get_tokens, token::Token}, semantic, syntax::build_ast }; use std::io::{self, BufRead}; #[derive(Serialize)] enum TokenizeResult { Ok(Vec), + SyntaxOnly(Vec, MistiError), TokensOnly(Vec, MistiError), Err(MistiError), } @@ -36,7 +35,12 @@ pub fn tokenize_command(_options: Vec) -> Result<(), ()> { Ok(tokens) => { let ast_result = build_ast(&tokens); match ast_result { - Ok(_) => TokenizeResult::Ok(tokens), + Ok(ast) => { + match semantic::check_semantics(&ast) { + Ok(()) => TokenizeResult::Ok(tokens), + Err(error) => TokenizeResult::SyntaxOnly(tokens, error) + } + }, Err(error) => TokenizeResult::TokensOnly(tokens, error), } }