@@ -36,27 +36,33 @@ impl SQLTokenizer<AcmeToken> for AcmeTokenizer {
36
36
}
37
37
38
38
fn next_token ( & mut self , chars : & mut CharSeq ) -> Result < Option < SQLToken < AcmeToken > > , TokenizerError > {
39
- // let mut arc = self.ansi_tokenizer.lock().unwrap();
40
- // match arc.peek_char() {
41
- // Some(&ch) => match ch {
42
- // '!' => {
43
- // arc.next_char(); // consume the first `!`
44
- // match arc.peek_char() {
45
- // Some(&ch) => match ch {
46
- // '!' => {
47
- // arc.next_char(); // consume the second `!`
48
- // Ok(Some(SQLToken::Custom(AcmeToken::Factorial)))
49
- // },
50
- // _ => Err(TokenizerError::UnexpectedChar(ch,Position::new(0,0)))
51
- // },
52
- // None => Ok(Some(SQLToken::Not))
53
- // }
54
- // }
55
- // _ => arc.next_token()
56
- // }
57
- // _ => arc.next_token()
58
- // }
59
- unimplemented ! ( )
39
+ let mut ansi = self . ansi_tokenizer . lock ( ) . unwrap ( ) ;
40
+ match chars. peek ( ) {
41
+ Some ( & ch) => match ch {
42
+ '!' => {
43
+ chars. mark ( ) ;
44
+ chars. next ( ) ; // consume the first `!`
45
+ match chars. peek ( ) {
46
+ Some ( & ch) => match ch {
47
+ '!' => {
48
+ chars. next ( ) ; // consume the second `!`
49
+ Ok ( Some ( SQLToken :: Custom ( AcmeToken :: Factorial ) ) )
50
+ } ,
51
+ _ => {
52
+ chars. reset ( ) ;
53
+ ansi. next_token ( chars)
54
+ }
55
+ } ,
56
+ None => {
57
+ chars. reset ( ) ;
58
+ ansi. next_token ( chars)
59
+ }
60
+ }
61
+ }
62
+ _ => ansi. next_token ( chars)
63
+ }
64
+ _ => ansi. next_token ( chars)
65
+ }
60
66
}
61
67
62
68
}
@@ -99,7 +105,9 @@ fn main() {
99
105
let ansi_parser = Arc :: new ( Mutex :: new ( ANSISQLParser :: new ( acme_tokenizer. clone ( ) ) ) ) ;
100
106
let acme_parser = Arc :: new ( Mutex :: new ( AcmeParser :: new ( acme_tokenizer. clone ( ) ) ) ) ;
101
107
102
- //let parser_list: Vec<Arc<Mutex<SQLParser<>>>> = vec![acme_parser, ansi_parser];
108
+ // ansi_parser.lock().unwrap().next_token();
109
+
110
+ //let parser_list = vec![acme_parser, ansi_parser];
103
111
104
112
// Custom ACME parser
105
113
// let acme_parser: Arc<Mutex<SQLParser<AcmeToken, AcmeExpr>>> = Arc::new(Mutex::new(AcmeParser {
0 commit comments