From fad3e50987311a3c42a45bd3d9dbcf7c7a77e544 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 30 Dec 2017 16:30:37 +0300 Subject: Lexer: symbols --- src/lexer/mod.rs | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'src/lexer/mod.rs') diff --git a/src/lexer/mod.rs b/src/lexer/mod.rs index e60dbbe8e..d2d4aaa22 100644 --- a/src/lexer/mod.rs +++ b/src/lexer/mod.rs @@ -37,6 +37,47 @@ fn next_token_inner(c: char, ptr: &mut Ptr) -> SyntaxKind { return scan_number(c, ptr); } + // One-byte tokens. + match c { + ';' => return SEMI, + ',' => return COMMA, + '(' => return L_PAREN, + ')' => return R_PAREN, + '{' => return L_CURLY, + '}' => return R_CURLY, + '[' => return L_BRACK, + ']' => return R_BRACK, + '@' => return AT, + '#' => return POUND, + '~' => return TILDE, + '?' => return QUESTION, + '$' => return DOLLAR, + '.' => return match (ptr.next(), ptr.nnext()) { + (Some('.'), Some('.')) => { + ptr.bump(); + ptr.bump(); + DOTDOTDOT + }, + (Some('.'), Some('=')) => { + ptr.bump(); + ptr.bump(); + DOTDOTEQ + }, + (Some('.'), _) => { + ptr.bump(); + DOTDOT + }, + _ => DOT + }, + ':' => return match ptr.next() { + Some(':') => { + ptr.bump(); + COLONCOLON + } + _ => COLON + }, + _ => (), + } ERROR } -- cgit v1.2.3