<分区>
上下文:Rust 具有match
结构,这对于制作(可能)详尽的案例及其相应结果列表非常有用。问题是:如何创建包含许多案例子集的案例?
关于我的具体问题,我正在制作一个词法分析器,它逐个字符地读取一个字符串并吐出标记。它的主要功能如下所示:
(...)
fn new(input: &str) -> Lexer {
let mut characters = input.chars();
for c in characters {
let mut token: Option<Token> = match c {
'+' => Some(Token::Add),
'-' => Some(Token::Minus),
'*' => Some(Token::Mul),
'/' => Some(Token::Div),
'e' => Some(Token::EulersNum),
'π' => Some(Token::Pi),
'(' => Some(Token::LeftParen),
')' => Some(Token::RightParen),
' ' | '\t' | '\n' => continue, //Whitespace
_ => None
};
if token == None {
continue;
}
}
todo!()
}
(...)
现在,就此问题而言,最重要的部分是用“空白”注释的部分。我处理空格的问题是它可能不对应于给定字符串格式中空格的实际实现。当然,我可以处理所有不同种类的 ascii 空格,但是 Unicode 呢?制作一个详尽的空格列表不仅很麻烦,而且还会混淆代码。它应该留给语言,而不是它的用户。
是否可以仅将其与“空白”表达式匹配,例如:
(...)
Whitespace => continue,
(...)
如果可以,我该怎么做?