tangled
alpha
login
or
join now
ecsolticia.codeberg.page
/
mipl
0
fork
atom
Minimal Imperative Parsing Library | https://docs.rs/mipl
0
fork
atom
overview
issues
pulls
pipelines
fix empty string tokens in lexer output
ecsolticia.codeberg.page
5 months ago
44aec666
2e64c84e
+17
-9
1 changed file
expand all
collapse all
unified
split
src
lexer.rs
+17
-9
src/lexer.rs
···
36
36
#[derive(Debug, Clone)]
37
37
pub struct Tokens(VecDeque<Token>);
38
38
impl Tokens {
39
39
+
fn chars_buf_into_tok(
40
40
+
chars_buf: &mut Vec<char>,
41
41
+
inner: &mut VecDeque<Token>
42
42
+
) {
43
43
+
let new_tok: String = chars_buf.iter().collect();
44
44
+
45
45
+
chars_buf.drain(..);
46
46
+
47
47
+
inner.push_back(Token::Str(
48
48
+
new_tok
49
49
+
));
50
50
+
}
51
51
+
39
52
/// Tokenize string input.
40
53
pub fn new<T: AsRef<str>>(
41
54
value: T,
···
55
68
let is_del = is_d_del | is_k_del;
56
69
57
70
if is_del {
58
58
-
let new_tok: String = chars_buf.iter().collect();
59
59
-
chars_buf = Vec::new();
60
60
-
inner.push_back(Token::Str(
61
61
-
new_tok
62
62
-
));
71
71
+
if !chars_buf.is_empty() {
72
72
+
Tokens::chars_buf_into_tok(&mut chars_buf, &mut inner);
73
73
+
}
63
74
64
75
if is_k_del {
65
76
inner.push_back(Token::Str(
···
72
83
}
73
84
74
85
if !chars_buf.is_empty() {
75
75
-
let new_tok: String = chars_buf.iter().collect();
76
76
-
inner.push_back(Token::Str(
77
77
-
new_tok
78
78
-
));
86
86
+
Tokens::chars_buf_into_tok(&mut chars_buf, &mut inner);
79
87
}
80
88
81
89
inner.push_back(Token::Newline(NewlineToken));