瀏覽代碼

Allow case-insensitive keywords

main
Dylan Baker 4 年之前
父節點
當前提交
9667b142be
共有 1 個檔案被更改,包括 16 行新增4 行删除
  1. 16
    4
      src/lexer.rs

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

@@ -23,9 +23,9 @@ lazy_static! {
23 23
     static ref WHITESPACE_REGEX: Regex = Regex::new(r"\s").unwrap();
24 24
     static ref MATCHERS: Vec<Matcher> = vec![
25 25
         Matcher::new(r#"^"(.*)""#, TokenType::String),
26
-        Matcher::new(r#"^SELECT"#, TokenType::Select),
27
-        Matcher::new(r#"^FROM"#, TokenType::From),
28
-        Matcher::new(r#"^WHERE"#, TokenType::Where),
26
+        Matcher::new(r#"(?i)^SELECT"#, TokenType::Select),
27
+        Matcher::new(r#"(?i)^FROM"#, TokenType::From),
28
+        Matcher::new(r#"(?i)^WHERE"#, TokenType::Where),
29 29
         Matcher::new(r#"^[a-z][a-zA-Z_\-.*]*"#, TokenType::Identfiier),
30 30
         Matcher::new(r#"^[0-9]+"#, TokenType::Number),
31 31
         Matcher::new(r#"^\*"#, TokenType::Star),
@@ -91,7 +91,7 @@ mod tests {
91 91
     }
92 92
 
93 93
     #[test]
94
-    fn it_scans_keywords() {
94
+    fn it_scans_uppercase_keywords() {
95 95
         assert_eq!(
96 96
             scan("SELECT FROM WHERE").unwrap(),
97 97
             vec![
@@ -102,6 +102,18 @@ mod tests {
102 102
         )
103 103
     }
104 104
 
105
+    #[test]
106
+    fn it_scans_lowercase_keywords() {
107
+        assert_eq!(
108
+            scan("select from where").unwrap(),
109
+            vec![
110
+                Token::new(TokenType::Select, "select"),
111
+                Token::new(TokenType::From, "from"),
112
+                Token::new(TokenType::Where, "where"),
113
+            ]
114
+        )
115
+    }
116
+
105 117
     #[test]
106 118
     fn it_scans_an_identifier() {
107 119
         assert_eq!(

Loading…
取消
儲存