mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-06 19:56:42 +01:00
make ) a closer from num/sym/key, and we run again! borkenly
This commit is contained in:
parent
a595e2e895
commit
323afe4c89
2 changed files with 17 additions and 20 deletions
|
|
@ -15,41 +15,38 @@ impl<'a> TokenIter<'a> {
|
|||
}
|
||||
}
|
||||
pub const fn peek_src <'a> (source: &'a str) -> Option<Token<'a>> {
|
||||
let mut token: Token<'a> = Token::new(source, Nil, 0, 0);
|
||||
let mut token: Token<'a> = Token::new(source, 0, 0, Nil);
|
||||
iterate!(char_indices(source) => (start, c) => token = match token.value() {
|
||||
Err(_) => return Some(token),
|
||||
Nil => match c {
|
||||
' '|'\n'|'\r'|'\t' => token.grow(),
|
||||
'(' => Token { source, start, length: 1,
|
||||
value: Value::Exp(1, TokenIter(str_range(source, start, start + 1))),
|
||||
},
|
||||
':'|'@' => Token { source, start, length: 1,
|
||||
value: Value::Sym(str_range(source, start, start + 1)),
|
||||
},
|
||||
'/'|'a'..='z' => Token { source, start, length: 1,
|
||||
value: Value::Key(str_range(source, start, start + 1)),
|
||||
},
|
||||
'0'..='9' => Token { source, start, length: 1,
|
||||
value: match to_digit(c) {
|
||||
' '|'\n'|'\r'|'\t' =>
|
||||
token.grow(),
|
||||
'(' =>
|
||||
Token::new(source, start, 1, Exp(1, TokenIter(str_range(source, start, start + 1)))),
|
||||
':'|'@' =>
|
||||
Token::new(source, start, 1, Sym(str_range(source, start, start + 1))),
|
||||
'/'|'a'..='z' =>
|
||||
Token::new(source, start, 1, Key(str_range(source, start, start + 1))),
|
||||
'0'..='9' =>
|
||||
Token::new(source, start, 1, match to_digit(c) {
|
||||
Ok(c) => Value::Num(c),
|
||||
Result::Err(e) => Value::Err(e)
|
||||
}
|
||||
},
|
||||
}),
|
||||
_ => token.error(Unexpected(c))
|
||||
},
|
||||
Num(n) => match c {
|
||||
'0'..='9' => token.grow_num(n, c),
|
||||
' '|'\n'|'\r'|'\t' => return Some(token),
|
||||
' '|'\n'|'\r'|'\t'|')' => return Some(token),
|
||||
_ => token.error(Unexpected(c))
|
||||
},
|
||||
Sym(_) => match c {
|
||||
'a'..='z'|'0'..='9'|'-' => token.grow_sym(),
|
||||
' '|'\n'|'\r'|'\t' => return Some(token),
|
||||
' '|'\n'|'\r'|'\t'|')' => return Some(token),
|
||||
_ => token.error(Unexpected(c))
|
||||
},
|
||||
Key(_) => match c {
|
||||
'a'..='z'|'0'..='9'|'-'|'/' => token.grow_key(),
|
||||
' '|'\n'|'\r'|'\t' => return Some(token),
|
||||
' '|'\n'|'\r'|'\t'|')' => return Some(token),
|
||||
_ => token.error(Unexpected(c))
|
||||
},
|
||||
Exp(depth, _) => match depth {
|
||||
|
|
|
|||
|
|
@ -15,8 +15,8 @@ use self::Value::*;
|
|||
Exp(usize, TokenIter<'a>),
|
||||
}
|
||||
impl<'a> Token<'a> {
|
||||
pub const fn new (source: &'a str, value: Value<'a>, start: usize, length: usize) -> Self {
|
||||
Self { source, value, start, length }
|
||||
pub const fn new (source: &'a str, start: usize, length: usize, value: Value<'a>) -> Self {
|
||||
Self { source, start, length, value }
|
||||
}
|
||||
pub const fn end (&self) -> usize {
|
||||
self.start + self.length
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue