Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,38 +1,38 @@
use std::collections::BTreeMap;

use crate::evaluator::model::object::Object;
use crate::evaluator::Object;

#[derive(Debug, Clone)]
pub(crate) struct Environment {
pub(super) struct Environment {
variables: BTreeMap<String, Object>,
sub_environment: Option<Box<Environment>>,
}

impl Environment {
pub(crate) fn new() -> Environment {
pub(super) fn new() -> Environment {
Environment {
variables: BTreeMap::new(),
sub_environment: None,
}
}

pub(crate) fn push(&mut self) {
pub(super) fn push(&mut self) {
self.sub_environment = Some(Box::new(self.clone()));
self.variables = BTreeMap::new();
}

pub(crate) fn pop(&mut self) {
pub(super) fn pop(&mut self) {
if let Some(sub_environment) = self.sub_environment.clone() {
self.variables = sub_environment.variables;
self.sub_environment = sub_environment.sub_environment;
}
}

pub(crate) fn set(&mut self, identifier: String, value: Object) {
pub(super) fn set(&mut self, identifier: String, value: Object) {
self.variables.insert(identifier, value);
}

pub(crate) fn get<T: AsRef<str>>(&self, identifier: T) -> Object {
pub(super) fn get<T: AsRef<str>>(&self, identifier: T) -> Object {
match self.variables.get(identifier.as_ref()) {
Some(value) => value.clone(),
None => {
Expand Down
2 changes: 1 addition & 1 deletion src/evaluator/expression/boolean/mod.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use crate::evaluator::Evaluator;
use crate::evaluator::model::object::Object;
use crate::evaluator::Object;

impl Evaluator {
pub(super) fn evaluate_boolean(&self, literal: bool) -> anyhow::Result<Object> {
Expand Down
4 changes: 2 additions & 2 deletions src/evaluator/expression/call/mod.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use crate::evaluator::Evaluator;
use crate::evaluator::model::object::Object;
use crate::syntax_analysis::model::syntax_tree_node::Expression;
use crate::evaluator::Object;
use crate::syntax_analysis::Expression;

impl Evaluator {
pub(super) fn evaluate_call_expression(
Expand Down
4 changes: 2 additions & 2 deletions src/evaluator/expression/function/mod.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use crate::evaluator::Evaluator;
use crate::evaluator::model::object::Object;
use crate::syntax_analysis::model::syntax_tree_node::Block;
use crate::evaluator::Object;
use crate::syntax_analysis::Block;

impl Evaluator {
pub(super) fn evaluate_function_expression(
Expand Down
4 changes: 2 additions & 2 deletions src/evaluator/expression/if_expression/mod.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use crate::evaluator::Evaluator;
use crate::evaluator::model::object::Object;
use crate::syntax_analysis::model::syntax_tree_node::{Block, Expression};
use crate::evaluator::Object;
use crate::syntax_analysis::{Block, Expression};

impl Evaluator {
pub(super) fn evaluate_if_expression(
Expand Down
4 changes: 2 additions & 2 deletions src/evaluator/expression/infix/mod.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use crate::evaluator::Evaluator;
use crate::evaluator::model::object::Object;
use crate::syntax_analysis::model::syntax_tree_node::{Expression, InfixOperator};
use crate::evaluator::Object;
use crate::syntax_analysis::{Expression, InfixOperator};

impl Evaluator {
pub(super) fn evaluate_infix_expression(
Expand Down
2 changes: 1 addition & 1 deletion src/evaluator/expression/integer/mod.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use crate::evaluator::Evaluator;
use crate::evaluator::model::object::Object;
use crate::evaluator::Object;

impl Evaluator {
pub(super) fn evaluate_integer(&self, literal: i64) -> anyhow::Result<Object> {
Expand Down
6 changes: 3 additions & 3 deletions src/evaluator/expression/mod.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use crate::evaluator::Evaluator;
use crate::evaluator::model::object::Object;
use crate::syntax_analysis::model::syntax_tree_node::*;
use crate::evaluator::Object;
use crate::syntax_analysis::*;

mod boolean;
mod call;
Expand All @@ -12,7 +12,7 @@ mod prefix;
mod string;

impl Evaluator {
pub(crate) fn evaluate_expression(&mut self, expression: Expression) -> anyhow::Result<Object> {
pub(super) fn evaluate_expression(&mut self, expression: Expression) -> anyhow::Result<Object> {
match expression {
Expression::Integer { literal } => self.evaluate_integer(literal),
Expression::String { literal } => self.evaluate_string(literal),
Expand Down
4 changes: 2 additions & 2 deletions src/evaluator/expression/prefix/mod.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use crate::evaluator::Evaluator;
use crate::evaluator::model::object::Object;
use crate::syntax_analysis::model::syntax_tree_node::Expression;
use crate::evaluator::Object;
use crate::syntax_analysis::Expression;

impl Evaluator {
pub(super) fn evaluate_not_prefix_expression(
Expand Down
2 changes: 1 addition & 1 deletion src/evaluator/expression/string/mod.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use crate::evaluator::Evaluator;
use crate::evaluator::model::object::Object;
use crate::evaluator::Object;

impl Evaluator {
pub(super) fn evaluate_string(&self, string: String) -> anyhow::Result<Object> {
Expand Down
11 changes: 6 additions & 5 deletions src/evaluator/mod.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
use crate::evaluator::model::environment::Environment;
use crate::evaluator::model::object::Object;
use crate::syntax_analysis::model::syntax_tree_node::*;

pub(crate) mod model;
use crate::evaluator::environment::Environment;
use crate::syntax_analysis::*;

mod environment;
mod expression;
mod object;
mod statement;

pub use object::Object;

#[derive(Debug)]
pub(crate) struct Evaluator {
environment: Environment,
Expand Down
2 changes: 0 additions & 2 deletions src/evaluator/model/mod.rs

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
use std::fmt;

use crate::syntax_analysis::model::syntax_tree_node::Block;
use crate::syntax_analysis::Block;

#[derive(Debug, Clone, PartialEq)]
pub(crate) enum Object {
pub enum Object {
Return {
value: Box<Object>,
},
Expand Down
4 changes: 2 additions & 2 deletions src/evaluator/statement/let_statement/mod.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use crate::evaluator::Evaluator;
use crate::evaluator::model::object::Object;
use crate::syntax_analysis::model::syntax_tree_node::*;
use crate::evaluator::Object;
use crate::syntax_analysis::*;

impl Evaluator {
pub(super) fn evaluate_let_statement(
Expand Down
4 changes: 2 additions & 2 deletions src/evaluator/statement/mod.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use crate::evaluator::Evaluator;
use crate::evaluator::model::object::Object;
use crate::syntax_analysis::model::syntax_tree_node::*;
use crate::evaluator::Object;
use crate::syntax_analysis::*;

mod let_statement;
mod return_statement;
Expand Down
4 changes: 2 additions & 2 deletions src/evaluator/statement/return_statement/mod.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use crate::evaluator::Evaluator;
use crate::evaluator::model::object::Object;
use crate::syntax_analysis::model::syntax_tree_node::*;
use crate::evaluator::Object;
use crate::syntax_analysis::*;

impl Evaluator {
pub(super) fn evaluate_return_statement(
Expand Down
4 changes: 2 additions & 2 deletions src/lexical_analysis/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ use std::str::Chars;

use log::{debug, info, trace};

use crate::lexical_analysis::model::token::Token;
mod token;

pub(crate) mod model;
pub use token::Token;

pub(crate) struct LexicalAnalysis<'a> {
source_code: Peekable<Chars<'a>>,
Expand Down
1 change: 0 additions & 1 deletion src/lexical_analysis/model/mod.rs

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#[derive(Debug, Clone, PartialEq)]
pub(crate) enum Token {
pub enum Token {
// Identifiers
Identifier { literal: String },

Expand Down
6 changes: 3 additions & 3 deletions src/syntax_analysis/expression/function_expression/mod.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
use log::debug;

use crate::lexical_analysis::model::token::Token;
use crate::lexical_analysis::Token;
use crate::syntax_analysis::Expression;
use crate::syntax_analysis::SyntaxAnalysis;
use crate::syntax_analysis::model::syntax_tree_node::Expression;

impl SyntaxAnalysis<'_> {
pub(crate) fn parse_function_expression(&mut self) -> anyhow::Result<Expression> {
pub(super) fn parse_function_expression(&mut self) -> anyhow::Result<Expression> {
debug!("Parsing a function expression.");

// parse function expression
Expand Down
8 changes: 4 additions & 4 deletions src/syntax_analysis/expression/grouped_expression/mod.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
use log::debug;

use crate::lexical_analysis::model::token::Token;
use crate::lexical_analysis::Token;
use crate::syntax_analysis::Expression;
use crate::syntax_analysis::SyntaxAnalysis;
use crate::syntax_analysis::model::expression_precedence::ExpressionPrecedence;
use crate::syntax_analysis::model::syntax_tree_node::Expression;
use crate::syntax_analysis::expression_precedence::ExpressionPrecedence;

impl SyntaxAnalysis<'_> {
pub(crate) fn parse_grouped_expression(&mut self) -> anyhow::Result<Expression> {
pub(super) fn parse_grouped_expression(&mut self) -> anyhow::Result<Expression> {
debug!("Parsing a grouped expression.");

assert_token!(
Expand Down
8 changes: 4 additions & 4 deletions src/syntax_analysis/expression/if_expression/mod.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
use log::debug;

use crate::lexical_analysis::model::token::Token;
use crate::lexical_analysis::Token;
use crate::syntax_analysis::Expression;
use crate::syntax_analysis::SyntaxAnalysis;
use crate::syntax_analysis::model::expression_precedence::ExpressionPrecedence;
use crate::syntax_analysis::model::syntax_tree_node::Expression;
use crate::syntax_analysis::expression_precedence::ExpressionPrecedence;

impl SyntaxAnalysis<'_> {
pub(crate) fn parse_if_expression(&mut self) -> anyhow::Result<Expression> {
pub(super) fn parse_if_expression(&mut self) -> anyhow::Result<Expression> {
debug!("Parsing a if expression.");

// parse if expression
Expand Down
10 changes: 5 additions & 5 deletions src/syntax_analysis/expression/mod.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
use anyhow::Context;
use log::{debug, trace};

use crate::lexical_analysis::model::token::Token;
use crate::lexical_analysis::Token;
use crate::syntax_analysis::SyntaxAnalysis;
use crate::syntax_analysis::model::expression_precedence::ExpressionPrecedence;
use crate::syntax_analysis::model::syntax_tree_node::{Expression, SyntaxTreeNode};
use crate::syntax_analysis::expression_precedence::ExpressionPrecedence;
use crate::syntax_analysis::{Expression, SyntaxTreeNode};

mod function_expression;
mod grouped_expression;
Expand All @@ -13,13 +13,13 @@ mod pratt_parsing;
mod utilities;

impl SyntaxAnalysis<'_> {
pub(crate) fn get_expression_node(&mut self) -> anyhow::Result<SyntaxTreeNode> {
pub(super) fn get_expression_node(&mut self) -> anyhow::Result<SyntaxTreeNode> {
let expression = self.get_expression(ExpressionPrecedence::Lowest)?;
semicolon!(self);
Ok(SyntaxTreeNode::Expression { expression })
}

pub(crate) fn get_expression(
pub(super) fn get_expression(
&mut self,
expression_precedence: ExpressionPrecedence,
) -> anyhow::Result<Expression> {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
use log::debug;

use crate::syntax_analysis::Expression;
use crate::syntax_analysis::SyntaxAnalysis;
use crate::syntax_analysis::model::syntax_tree_node::Expression;

impl SyntaxAnalysis<'_> {
pub(crate) fn parse_call_expression(
pub(super) fn parse_call_expression(
&mut self,
function: Expression,
) -> anyhow::Result<Expression> {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
use log::debug;

use crate::lexical_analysis::model::token::Token;
use crate::lexical_analysis::Token;
use crate::syntax_analysis::SyntaxAnalysis;
use crate::syntax_analysis::model::expression_precedence::get_infix_operator_precedence;
use crate::syntax_analysis::model::syntax_tree_node::{Expression, InfixOperator};
use crate::syntax_analysis::expression_precedence::get_infix_operator_precedence;
use crate::syntax_analysis::{Expression, InfixOperator};

impl SyntaxAnalysis<'_> {
pub(crate) fn parse_infix_expression(
pub(super) fn parse_infix_expression(
&mut self,
left_hand: Expression,
) -> anyhow::Result<Expression> {
Expand Down
8 changes: 4 additions & 4 deletions src/syntax_analysis/expression/pratt_parsing/mod.rs
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
use crate::lexical_analysis::model::token::Token;
use crate::lexical_analysis::Token;
use crate::syntax_analysis::Expression;
use crate::syntax_analysis::SyntaxAnalysis;
use crate::syntax_analysis::model::expression_precedence::{
use crate::syntax_analysis::expression_precedence::{
ExpressionPrecedence, get_current_expression_precedence,
};
use crate::syntax_analysis::model::syntax_tree_node::Expression;

mod call_expression;
mod infix_expression;

impl SyntaxAnalysis<'_> {
pub(crate) fn pratt_parsing(
pub(super) fn pratt_parsing(
&mut self,
mut expression: Expression,
minimum_expression_precedence: ExpressionPrecedence,
Expand Down
6 changes: 3 additions & 3 deletions src/syntax_analysis/expression/utilities/mod.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
use log::debug;

use crate::lexical_analysis::model::token::Token;
use crate::lexical_analysis::Token;
use crate::syntax_analysis::SyntaxAnalysis;
use crate::syntax_analysis::model::expression_precedence::ExpressionPrecedence;
use crate::syntax_analysis::model::syntax_tree_node::{Block, Expression};
use crate::syntax_analysis::expression_precedence::ExpressionPrecedence;
use crate::syntax_analysis::{Block, Expression};

impl SyntaxAnalysis<'_> {
pub(super) fn parse_block(&mut self) -> anyhow::Result<Block> {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
use log::trace;

use crate::lexical_analysis::model::token::Token;
use crate::syntax_analysis::model::syntax_tree_node::InfixOperator;
use crate::lexical_analysis::Token;
use crate::syntax_analysis::InfixOperator;

#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)]
pub(crate) enum ExpressionPrecedence {
pub(super) enum ExpressionPrecedence {
Lowest,
Equals,
LesserOrGreater,
Expand All @@ -14,7 +14,7 @@ pub(crate) enum ExpressionPrecedence {
Call,
}

pub(crate) fn get_current_expression_precedence(token: &Token) -> ExpressionPrecedence {
pub(super) fn get_current_expression_precedence(token: &Token) -> ExpressionPrecedence {
match token {
Token::Equals => ExpressionPrecedence::Equals,
Token::NotEquals => ExpressionPrecedence::Equals,
Expand All @@ -32,7 +32,7 @@ pub(crate) fn get_current_expression_precedence(token: &Token) -> ExpressionPrec
}
}

pub(crate) fn get_infix_operator_precedence(operator: &InfixOperator) -> ExpressionPrecedence {
pub(super) fn get_infix_operator_precedence(operator: &InfixOperator) -> ExpressionPrecedence {
match operator {
InfixOperator::Equals | InfixOperator::NotEquals => ExpressionPrecedence::Equals,
InfixOperator::LesserThan | InfixOperator::GreaterThan => {
Expand Down
Loading