@@ -8,6 +8,7 @@ lazy_static! {
|
|||||||
(?P<float>[-+]?[0-9]+\.[0-9]+([eE][+\-][0-9]+)?)
|
(?P<float>[-+]?[0-9]+\.[0-9]+([eE][+\-][0-9]+)?)
|
||||||
| (?P<int>[-+]?[0-9]+)
|
| (?P<int>[-+]?[0-9]+)
|
||||||
| (?P<assign>=[a-zA-Z_?\-*+/.'@$%^&|][0-9a-zA-Z_?\-*+/=.'@$%^&|]*)
|
| (?P<assign>=[a-zA-Z_?\-*+/.'@$%^&|][0-9a-zA-Z_?\-*+/=.'@$%^&|]*)
|
||||||
|
| (?P<meta>%[a-zA-Z0-9\-_]+)
|
||||||
| (?P<word>[a-zA-Z_?\-*+/=.'@$%^&|][0-9a-zA-Z_?\-*+/=.'@$%^&|]*)
|
| (?P<word>[a-zA-Z_?\-*+/=.'@$%^&|][0-9a-zA-Z_?\-*+/=.'@$%^&|]*)
|
||||||
| (?P<lquote>\[)
|
| (?P<lquote>\[)
|
||||||
| (?P<rquote>\])
|
| (?P<rquote>\])
|
||||||
@@ -89,6 +90,8 @@ impl<'t> Lexer<'t> {
|
|||||||
self.end = self.end.next_str(cap.get(0).unwrap().as_str());
|
self.end = self.end.next_str(cap.get(0).unwrap().as_str());
|
||||||
let sp_token = if let Some(_) = cap.name("assign") {
|
let sp_token = if let Some(_) = cap.name("assign") {
|
||||||
self.make_token(Token::Assign)
|
self.make_token(Token::Assign)
|
||||||
|
} else if let Some(_) = cap.name("meta") {
|
||||||
|
self.make_token(Token::Meta)
|
||||||
} else if let Some(_) = cap.name("word") {
|
} else if let Some(_) = cap.name("word") {
|
||||||
self.make_token(Token::Word)
|
self.make_token(Token::Word)
|
||||||
} else if let Some(_) = cap.name("float") {
|
} else if let Some(_) = cap.name("float") {
|
||||||
@@ -193,6 +196,19 @@ mod test {
|
|||||||
assert!(lexer.is_eof());
|
assert!(lexer.is_eof());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_meta() {
|
||||||
|
let mut lexer = Lexer::new(r"%meta %meta1 %include %include1029 %10239meta % %%");
|
||||||
|
assert_token!(lexer, Token::Meta, "%meta");
|
||||||
|
assert_token!(lexer, Token::Meta, "%meta1");
|
||||||
|
assert_token!(lexer, Token::Meta, "%include");
|
||||||
|
assert_token!(lexer, Token::Meta, "%include1029");
|
||||||
|
assert_token!(lexer, Token::Meta, "%10239meta");
|
||||||
|
assert_token!(lexer, Token::Word, "%");
|
||||||
|
assert_token!(lexer, Token::Word, "%%");
|
||||||
|
assert!(lexer.is_eof());
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_numbers() {
|
fn test_numbers() {
|
||||||
let mut lexer = Lexer::new(r"1 -12 123 -9 98 987 -987654321 1248 9764321 -1.2 2.3");
|
let mut lexer = Lexer::new(r"1 -12 123 -9 98 987 -987654321 1248 9764321 -1.2 2.3");
|
||||||
|
|||||||
@@ -29,6 +29,9 @@ pub enum Token {
|
|||||||
|
|
||||||
/// Apply.
|
/// Apply.
|
||||||
Apply,
|
Apply,
|
||||||
|
|
||||||
|
/// Meta
|
||||||
|
Meta,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Token {
|
impl Token {
|
||||||
@@ -44,6 +47,7 @@ impl Token {
|
|||||||
RQuote => "quote end",
|
RQuote => "quote end",
|
||||||
Colon => "colon",
|
Colon => "colon",
|
||||||
Apply => "apply",
|
Apply => "apply",
|
||||||
|
Meta => "meta",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user