Newer
Older
use parser_impls::chars::{AlphabeticCharacterParser, CharacterParser};
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'
}
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
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());