@@ -11,14 +11,14 @@ use crate::error::LexerError;
1111use crate :: token:: { Operator , Sym , Symbol , Text , Token } ;
1212use nom:: branch:: alt;
1313use nom:: bytes:: complete:: { tag, take_while} ;
14- use nom:: character:: complete:: { alpha1, alphanumeric0 , char, multispace1} ;
14+ use nom:: character:: complete:: { alpha1, char, multispace1, satisfy } ;
1515use nom:: character:: one_of;
1616use nom:: combinator:: { eof, opt, recognize} ;
1717use nom:: error:: { Error , context} ;
1818use nom:: multi:: many0;
1919use nom:: number:: complete:: double;
2020use nom:: sequence:: { delimited, pair} ;
21- use nom:: { IResult , Parser } ;
21+ use nom:: { AsChar , IResult , Parser } ;
2222
2323/// Tokenize an EventQL query string.
2424///
@@ -165,31 +165,34 @@ fn operator_2(input: Text) -> IResult<Text, Token> {
165165}
166166
167167fn ident ( input : Text ) -> IResult < Text , Token > {
168- recognize ( pair ( alpha1, alphanumeric0) )
169- . map ( |value : Text | {
170- let sym = if value. fragment ( ) . eq_ignore_ascii_case ( "and" ) {
171- Sym :: Operator ( Operator :: And )
172- } else if value. fragment ( ) . eq_ignore_ascii_case ( "or" ) {
173- Sym :: Operator ( Operator :: Or )
174- } else if value. fragment ( ) . eq_ignore_ascii_case ( "xor" ) {
175- Sym :: Operator ( Operator :: Xor )
176- } else if value. fragment ( ) . eq_ignore_ascii_case ( "not" ) {
177- Sym :: Operator ( Operator :: Not )
178- } else if value. fragment ( ) . eq_ignore_ascii_case ( "contains" ) {
179- Sym :: Operator ( Operator :: Contains )
180- } else if value. fragment ( ) . eq_ignore_ascii_case ( "as" ) {
181- Sym :: Operator ( Operator :: As )
182- } else {
183- Sym :: Id ( value. fragment ( ) )
184- } ;
185-
186- Token {
187- sym,
188- line : value. location_line ( ) ,
189- col : value. get_column ( ) as u32 ,
190- }
191- } )
192- . parse ( input)
168+ recognize ( pair (
169+ alpha1,
170+ many0 ( satisfy ( |c| AsChar :: is_alphanum ( c) || c == '_' ) ) ,
171+ ) )
172+ . map ( |value : Text | {
173+ let sym = if value. fragment ( ) . eq_ignore_ascii_case ( "and" ) {
174+ Sym :: Operator ( Operator :: And )
175+ } else if value. fragment ( ) . eq_ignore_ascii_case ( "or" ) {
176+ Sym :: Operator ( Operator :: Or )
177+ } else if value. fragment ( ) . eq_ignore_ascii_case ( "xor" ) {
178+ Sym :: Operator ( Operator :: Xor )
179+ } else if value. fragment ( ) . eq_ignore_ascii_case ( "not" ) {
180+ Sym :: Operator ( Operator :: Not )
181+ } else if value. fragment ( ) . eq_ignore_ascii_case ( "contains" ) {
182+ Sym :: Operator ( Operator :: Contains )
183+ } else if value. fragment ( ) . eq_ignore_ascii_case ( "as" ) {
184+ Sym :: Operator ( Operator :: As )
185+ } else {
186+ Sym :: Id ( value. fragment ( ) )
187+ } ;
188+
189+ Token {
190+ sym,
191+ line : value. location_line ( ) ,
192+ col : value. get_column ( ) as u32 ,
193+ }
194+ } )
195+ . parse ( input)
193196}
194197
195198fn number ( input : Text ) -> IResult < Text , Token > {
0 commit comments