Я пишу простой токенизатор, который будет принимать входные данные от его новой функции (которая, вероятно, будет удалена в пользу REPL) и выплевывать токены, связанные с синтаксисом css.
Здесь Вот пример:
#[derive(Debug)]
pub enum Token {
Selector,
LBrace,
RBrace,
Property,
Value,
}
#[derive(Debug)]
pub struct Tokenizer {
source: String,
tokens: Vec<(Token, String)>,
}
impl Tokenizer {
pub fn new(source: &str) -> Self {
let source = source.to_string();
for (i, c) in source.chars().enumerate() {
if c == '.' {
// This is where I am stuck.
}
}
Self {
source,
tokens: vec![],
}
}
}
fn main() {
let tokens = Tokenizer::new(".example{}");
println!("{:#?}", tokens);
}
Теперь моя проблема в том, что я хочу перебирать следующие символы, пока не встретлю один из #
'space'
, .
, но я понятия не имею, как ржавчина позволяет мне продолжать итерации, пока не будет выполнено условие. Есть ли способ вызвать следующий символ в последовательности?
Также, если вы обнаружите, что что-то не так с этим кодом с точки зрения направления, которое я выбираю, пожалуйста, дайте мне знать. Спасибо.
Вот ссылка на ржавую площадку .