fourth/src/parse.rs

38 lines
766 B
Rust

use std::str::SplitWhitespace;
use TokenType::*;
#[derive(Debug)]
pub enum TokenType<'a> {
Number(u64),
Word(&'a str),
}
#[derive(Clone)]
pub struct Parser<'a> {
pub(crate) split_whitespace: SplitWhitespace<'a>
}
impl<'a> Iterator for Parser<'a> {
type Item = TokenType<'a>;
fn next(&mut self) -> Option<TokenType<'a>> {
let item = self.split_whitespace.next()?;
if let Ok(number) = item.parse::<u64>() {
return Some(Number(number));
} else {
return Some(Word(item));
}
}
}
impl<'a> Parser<'a> {
pub fn new(source: &'a str) -> Parser {
Parser {
split_whitespace: source.split_whitespace(),
}
}
pub fn inner_next(&mut self) -> Option<&'a str> {
self.split_whitespace.next()
}
}