Parcourir la source

Ignore whitespace

main
Dylan Baker il y a 4 ans
Parent
révision
adca91b52e
1 fichiers modifiés avec 17 ajouts et 1 suppressions
  1. 17
    1
      src/lexer.rs

+ 17
- 1
src/lexer.rs Voir le fichier

45
 }
45
 }
46
 
46
 
47
 lazy_static! {
47
 lazy_static! {
48
+    static ref WHITESPACE_REGEX: Regex = Regex::new(r"\s").unwrap();
48
     static ref MATCHERS: Vec<Matcher> = vec![
49
     static ref MATCHERS: Vec<Matcher> = vec![
49
         Matcher::new(r#""(.*)""#, TokenType::String),
50
         Matcher::new(r#""(.*)""#, TokenType::String),
50
-        Matcher::new(r#"SELECT"#, TokenType::Keyword),
51
+        Matcher::new(r#"(SELECT|FROM)"#, TokenType::Keyword),
51
         Matcher::new(r#"[a-z][a-zA-Z_]*"#, TokenType::Identfiier),
52
         Matcher::new(r#"[a-z][a-zA-Z_]*"#, TokenType::Identfiier),
52
         Matcher::new(r#"[0-9]+"#, TokenType::Number)
53
         Matcher::new(r#"[0-9]+"#, TokenType::Number)
53
     ];
54
     ];
58
     let mut position = 0;
59
     let mut position = 0;
59
 
60
 
60
     while position < input.len() {
61
     while position < input.len() {
62
+        while WHITESPACE_REGEX.is_match(&input[position..position + 1]) {
63
+            position += 1;
64
+        }
65
+
61
         for matcher in MATCHERS.iter() {
66
         for matcher in MATCHERS.iter() {
62
             if matcher.regex.is_match(&input[position..]) {
67
             if matcher.regex.is_match(&input[position..]) {
63
                 dbg!(&input[position..]);
68
                 dbg!(&input[position..]);
106
         )
111
         )
107
     }
112
     }
108
 
113
 
114
+    #[test]
115
+    fn it_scans_two_keywords() {
116
+        assert_eq!(
117
+            scan("SELECT FROM").unwrap(),
118
+            vec![
119
+                Token::new(TokenType::Keyword, "SELECT"),
120
+                Token::new(TokenType::Keyword, "FROM")
121
+            ]
122
+        )
123
+    }
124
+
109
     #[test]
125
     #[test]
110
     fn it_scans_an_identifier() {
126
     fn it_scans_an_identifier() {
111
         assert_eq!(
127
         assert_eq!(

Chargement…
Annuler
Enregistrer