Skip to content
Snippets Groups Projects
main.rs 2.66 KiB
Newer Older
Carlos Valencia's avatar
Carlos Valencia committed
use std::fs;

mod parser_impls;
use parser_impls::chars::{AlphabeticCharacterParser, CharacterParser};
Carlos Valencia's avatar
Carlos Valencia committed

mod parser;
use parser::parser::Parser;

mod combinators;
use combinators::combinators::{Bind, Many, ManyA, Empty, Sat, Alternative, Zip, Map};


fn equals_a_fun(c: char) -> bool {
    c == 'a'
}

fn equals_i_fun(c: char) -> bool {
    c == 'i'
}

fn x_to_k(a: char) -> char {
    'k'
}

Carlos Valencia's avatar
Carlos Valencia committed
fn main() {
    let source = "src/examples/example_programs/word.txt";
    let _file = fs::read_to_string(source).expect("File was not found or could not be read");
    let _parse_a = Bind{
        parser_first : Box::new(AlphabeticCharacterParser{}),
        parser_second: Box::new(AlphabeticCharacterParser{}),
    };
    // let parse_b = Bind{
    //     parser_first : Box::new(AlphabeticCharacterParser{}),
    //     parser_second: Box::new(AlphabeticCharacterParser{}),
    // };
    // let parse_c = Bind{
    //     parser_first : Box::new(parse_a),
    //     parser_second: Box::new(parse_b),
    // };
    // let res = Parser::parse(&parse_c, file);

    // Parses character h
    let char_parser_h = CharacterParser {
        character : 'h'
    };

    // let res = Parser::parse(&char_parser, file);

    // Parses many of the same charcter
    let _char_many_parser = Many {
        parser: Box::new(char_parser_h)
    };

    // let res = Parser::parse(&char_many_parser, file);

    //Parsers all alphabet characters
    // let parser_many = Many{
    //     parser : Box::new(AlphabeticCharacterParser{})
    // };
    // let res = Parser::parse(&parser_many, file);

    let _many_a = ManyA {};
    // let res = many_a.parse("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaak");

    let _empty = Empty{};
    // let res = empty.parse("hello".to_owned());

    let equals_a = Sat {
        sat_fun: equals_a_fun
    };
    // let res = Parser::parse(&equals_a, "aaa".to_owned());
    

    let equals_i = Sat {
        sat_fun: equals_i_fun
    };


    // let a_or_i = Alternative{
    //     parser_first: Box::new(equals_a),
    //     parser_second: Box::new(equals_i)
    // };

    // let res = Parser::parse(&h_or_i, "i".to_owned());

    // let a_then_i = Zip {
    //     parser_first: Box::new(equals_a),
    //     parser_second: Box::new(equals_i)
    // };

    // let res = Parser::parse(&a_then_i, "aa".to_owned());

    let map_a_k = Map {
        map_a_b_fun: x_to_k,
        parser_a: Box::new(equals_a)
    };

    let res = Parser::parse(&map_a_k, "".to_owned());
Carlos Valencia's avatar
Carlos Valencia committed

    print!("{:#?}", res);

}