浏览代码

Allow . and * in identifiers

main
Dylan Baker 4 年前
父节点
当前提交
f33e7471b3
共有 2 个文件被更改,包括 14 次插入6 次删除
  1. 14
    4
      src/lexer.rs
  2. 0
    2
      src/token.rs

+ 14
- 4
src/lexer.rs 查看文件

25
         Matcher::new(r#"^"(.*)""#, TokenType::String),
25
         Matcher::new(r#"^"(.*)""#, TokenType::String),
26
         Matcher::new(r#"^SELECT"#, TokenType::Select),
26
         Matcher::new(r#"^SELECT"#, TokenType::Select),
27
         Matcher::new(r#"^FROM"#, TokenType::From),
27
         Matcher::new(r#"^FROM"#, TokenType::From),
28
-        Matcher::new(r#"^[a-z][a-zA-Z_\-]*"#, TokenType::Identfiier),
28
+        Matcher::new(r#"^[a-z][a-zA-Z_\-.*]*"#, TokenType::Identfiier),
29
         Matcher::new(r#"^[0-9]+"#, TokenType::Number),
29
         Matcher::new(r#"^[0-9]+"#, TokenType::Number),
30
         Matcher::new(r#"^\*"#, TokenType::Star),
30
         Matcher::new(r#"^\*"#, TokenType::Star),
31
         Matcher::new(r#"^,"#, TokenType::Comma),
31
         Matcher::new(r#"^,"#, TokenType::Comma),
32
-        Matcher::new(r#"^\."#, TokenType::Dot),
33
     ];
32
     ];
34
 }
33
 }
35
 
34
 
136
     }
135
     }
137
 
136
 
138
     #[test]
137
     #[test]
139
-    fn it_scans_a_dot() {
140
-        assert_eq!(scan(".").unwrap(), vec![Token::new(TokenType::Dot, ".")])
138
+    fn it_allows_dots_in_identifiers() {
139
+        assert_eq!(
140
+            scan("foo.bar").unwrap(),
141
+            vec![Token::new(TokenType::Identfiier, "foo.bar")]
142
+        )
143
+    }
144
+
145
+    #[test]
146
+    fn it_allows_stars_in_identifiers() {
147
+        assert_eq!(
148
+            scan("foo.*").unwrap(),
149
+            vec![Token::new(TokenType::Identfiier, "foo.*")]
150
+        )
141
     }
151
     }
142
 
152
 
143
     #[test]
153
     #[test]

+ 0
- 2
src/token.rs 查看文件

26
 #[derive(Clone, Copy, Debug, PartialEq)]
26
 #[derive(Clone, Copy, Debug, PartialEq)]
27
 pub enum TokenType {
27
 pub enum TokenType {
28
     Comma,
28
     Comma,
29
-    Dot,
30
     From,
29
     From,
31
     Identfiier,
30
     Identfiier,
32
     Number,
31
     Number,
42
             "{}",
41
             "{}",
43
             match self {
42
             match self {
44
                 TokenType::Comma => "Comma",
43
                 TokenType::Comma => "Comma",
45
-                TokenType::Dot => "Dot",
46
                 TokenType::Identfiier => "Identifier",
44
                 TokenType::Identfiier => "Identifier",
47
                 TokenType::Number => "Number",
45
                 TokenType::Number => "Number",
48
                 TokenType::Star => "Star",
46
                 TokenType::Star => "Star",

正在加载...
取消
保存