refactor: move lexer to parser module
This commit is contained in:
parent
4808904571
commit
5863da677f
4 changed files with 7 additions and 11 deletions
|
@ -176,7 +176,6 @@ fn eval_ast_node(env: Rc<Environment>, ast_node: Node) -> Result<Rc<Expression>>
|
|||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use crate::lexer;
|
||||
use crate::parser;
|
||||
|
||||
use super::*;
|
||||
|
@ -242,8 +241,7 @@ mod test {
|
|||
#[case("(>= 1 2)", "false")]
|
||||
fn test_evaluator(#[case] input: &str, #[case] expected: &str) {
|
||||
let env = core_environment();
|
||||
let tokens = lexer::read(input).unwrap();
|
||||
let ast = parser::parse(tokens).unwrap();
|
||||
let ast = parser::parse_str(input).unwrap();
|
||||
let res = eval(env, ast)
|
||||
.unwrap()
|
||||
.into_iter()
|
||||
|
@ -260,8 +258,7 @@ mod test {
|
|||
#[case("{:a}")]
|
||||
fn test_evaluator_fail(#[case] input: &str) {
|
||||
let env = core_environment();
|
||||
let tokens = lexer::read(input).unwrap();
|
||||
let ast = parser::parse(tokens).unwrap();
|
||||
let ast = parser::parse_str(input).unwrap();
|
||||
let res = eval(env, ast);
|
||||
|
||||
assert!(res.is_err())
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
use std::io::{self, Write};
|
||||
|
||||
mod evaluator;
|
||||
mod lexer;
|
||||
mod parser;
|
||||
|
||||
fn main() {
|
||||
|
@ -22,8 +21,7 @@ fn main() {
|
|||
break;
|
||||
}
|
||||
|
||||
let tokens = lexer::read(&input).unwrap();
|
||||
let ast = parser::parse(tokens).unwrap();
|
||||
let ast = parser::parse_str(&input).unwrap();
|
||||
let res = evaluator::eval(env.clone(), ast);
|
||||
|
||||
match res {
|
||||
|
|
|
@ -2,7 +2,8 @@ use std::{collections::HashMap, iter::Peekable, vec::IntoIter};
|
|||
|
||||
use anyhow::{bail, Result};
|
||||
|
||||
use crate::lexer::Token;
|
||||
mod lexer;
|
||||
use lexer::Token;
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub enum Node {
|
||||
|
@ -19,8 +20,8 @@ pub enum Node {
|
|||
Map(HashMap<String, Node>),
|
||||
}
|
||||
|
||||
pub fn parse(tokens: Vec<Token>) -> Result<Vec<Node>> {
|
||||
let mut tokens = tokens.into_iter().peekable();
|
||||
pub fn parse_str(input: &str) -> Result<Vec<Node>> {
|
||||
let mut tokens = lexer::read(input)?.into_iter().peekable();
|
||||
let mut ast = Vec::new();
|
||||
|
||||
while let Some(node) = next_statement(&mut tokens)? {
|
Loading…
Reference in a new issue