@@ -12,12 +12,12 @@ enum TokenType {
12
12
NOT = 'NOT' ,
13
13
OPTIONAL = 'OPTIONAL' ,
14
14
EXACT = 'EXACT' ,
15
+ TAG = 'TAG' ,
15
16
VECTOR = 'VECTOR' ,
16
- FUZZY_EXPR = 'FUZZY' ,
17
- WILDCARD_EXPR = 'WILDCARD' ,
18
- PREFIX_EXPR = 'PREFIX' ,
17
+ FUZZY = 'FUZZY' ,
18
+ WILDCARD = 'WILDCARD' ,
19
+ PREFIX = 'PREFIX' ,
19
20
GEO_EXPR = 'GEO_EXPR' ,
20
- TAG_EXPR = 'TAG_EXPR' ,
21
21
IDS_EXPR = 'IDS_EXPR' ,
22
22
LEXRANGE_EXPR = 'LEXRANGE_EXPR' ,
23
23
NUMERIC = 'NUMERIC' ,
@@ -64,7 +64,7 @@ const KEYWORDS = {
64
64
[ TokenType . OPTIONAL . toString ( ) ] : TokenType . OPTIONAL ,
65
65
[ TokenType . EXACT . toString ( ) ] : TokenType . EXACT ,
66
66
[ TokenType . VECTOR . toString ( ) ] : TokenType . VECTOR ,
67
- [ TokenType . TAG_EXPR . toString ( ) ] : TokenType . TAG_EXPR ,
67
+ [ TokenType . TAG . toString ( ) ] : TokenType . TAG ,
68
68
[ TokenType . NUMERIC . toString ( ) ] : TokenType . NUMERIC ,
69
69
70
70
'inf' : TokenType . NUMBER ,
@@ -233,13 +233,13 @@ class Lexer {
233
233
const literal = this . ReadIdentifier ( )
234
234
let tokenType = KEYWORDS [ literal ] || TokenType . IDENTIFIER
235
235
if ( literal . startsWith ( 'TAG:' ) ) {
236
- tokenType = TokenType . TAG_EXPR
236
+ tokenType = TokenType . TAG
237
237
} else if ( literal === 'FUZZY' ) {
238
- tokenType = TokenType . FUZZY_EXPR
238
+ tokenType = TokenType . FUZZY
239
239
} else if ( literal === 'WILDCARD' ) {
240
- tokenType = TokenType . WILDCARD_EXPR
240
+ tokenType = TokenType . WILDCARD
241
241
} else if ( literal === 'PREFIX' ) {
242
- tokenType = TokenType . PREFIX_EXPR
242
+ tokenType = TokenType . PREFIX
243
243
} else if ( literal === 'IDS' ) {
244
244
tokenType = TokenType . IDS_EXPR
245
245
} else if ( literal === 'LEXRANGE' ) {
@@ -290,6 +290,7 @@ export enum EntityType {
290
290
WILDCARD = 'WILDCARD' ,
291
291
PREFIX = 'PREFIX' ,
292
292
TEXT = 'TEXT' ,
293
+ NUMBER = 'NUMBER' ,
293
294
TAG = 'TAG' ,
294
295
295
296
IDS = 'IDS' ,
@@ -352,7 +353,6 @@ export function GetAncestors(info: EntityInfo, searchId: string, a: IAncestors):
352
353
353
354
class Expr {
354
355
Core : string
355
- Type : EntityType
356
356
SubType : EntityType
357
357
Time ?: string
358
358
Info ?: string
@@ -537,18 +537,26 @@ class Parser {
537
537
Exprs . push ( this . parseNumericExpr ( ) )
538
538
} else if ( this . CurrentToken ?. T === TokenType . IDENTIFIER ) {
539
539
Exprs . push ( this . parseExpr ( ) )
540
- } else if ( [ TokenType . UNION , TokenType . INTERSECT , TokenType . NOT , TokenType . OPTIONAL , TokenType . EXACT , TokenType . VECTOR ] . includes ( t ) ) {
540
+ } else if ( [
541
+ TokenType . UNION ,
542
+ TokenType . INTERSECT ,
543
+ TokenType . NOT ,
544
+ TokenType . OPTIONAL ,
545
+ TokenType . EXACT ,
546
+ TokenType . VECTOR ,
547
+ TokenType . TAG
548
+ ] . includes ( t ) ) {
541
549
Exprs . push ( this . parseExpandExpr ( EntityType [ t ] ) )
542
- } else if ( this . CurrentToken . T === TokenType . TAG_EXPR ) {
543
- Exprs . push ( this . parseTagExpr ( ) )
544
550
} else if ( this . CurrentToken . T === TokenType . GEO_EXPR ) {
545
551
Exprs . push ( this . parseGeoExpr ( ) )
546
- } else if ( [ TokenType . FUZZY_EXPR , TokenType . WILDCARD_EXPR , TokenType . PREFIX_EXPR ] . includes ( t ) ) {
552
+ } else if ( [ TokenType . FUZZY , TokenType . WILDCARD , TokenType . PREFIX ] . includes ( t ) ) {
547
553
Exprs . push ( this . parseSimpleExpr ( EntityType [ t ] ) )
548
554
} else if ( this . CurrentToken . T === TokenType . IDS_EXPR ) {
549
555
Exprs . push ( this . parseIdsExpr ( ) )
550
556
} else if ( this . CurrentToken . T === TokenType . LEXRANGE_EXPR ) {
551
557
Exprs . push ( this . parseLexrangeExpr ( ) )
558
+ } else if ( this . CurrentToken . T === TokenType . NUMBER ) {
559
+ Exprs . push ( new Expr ( this . CurrentToken . Data . toString ( ) , EntityType . NUMBER ) )
552
560
}
553
561
554
562
this . nextToken ( )
@@ -731,56 +739,6 @@ class Parser {
731
739
return new Expr ( `${ first } ,${ second } --> ${ third } ${ metric } ` , EntityType . GEO , identifierData )
732
740
}
733
741
734
- parseTagExpr ( ) {
735
- this . assertToken ( TokenType . TAG_EXPR )
736
-
737
- let tagData = this . CurrentToken . Data
738
-
739
- this . nextToken ( )
740
-
741
- this . assertToken ( TokenType . LBRACE )
742
-
743
- this . nextToken ( )
744
-
745
- this . assertToken ( TokenType . NEW_LINE )
746
-
747
- this . nextToken ( )
748
-
749
- let Exprs : SearchExpr [ ] = [ ]
750
- while ( true ) {
751
-
752
- if ( this . CurrentToken . T === TokenType . RBRACE && this . PeekToken . T === TokenType . NEW_LINE ) {
753
-
754
- this . nextToken ( )
755
- break
756
- }
757
-
758
- const t = this . CurrentToken . T ;
759
-
760
- if ( this . CurrentToken ?. T === TokenType . NUMERIC ) {
761
- Exprs . push ( this . parseNumericExpr ( ) )
762
- } else if ( this . CurrentToken ?. T === TokenType . IDENTIFIER ) {
763
- Exprs . push ( this . parseExpr ( ) )
764
- } else if ( [ TokenType . UNION , TokenType . INTERSECT , TokenType . NOT , TokenType . OPTIONAL , TokenType . EXACT , TokenType . VECTOR ] . includes ( t ) ) {
765
- Exprs . push ( this . parseExpandExpr ( EntityType [ t ] ) )
766
- } else if ( this . CurrentToken . T === TokenType . TAG_EXPR ) {
767
- Exprs . push ( this . parseTagExpr ( ) )
768
- } else if ( this . CurrentToken . T === TokenType . GEO_EXPR ) {
769
- Exprs . push ( this . parseGeoExpr ( ) )
770
- } else if ( [ TokenType . FUZZY_EXPR , TokenType . WILDCARD_EXPR , TokenType . PREFIX_EXPR ] . includes ( t ) ) {
771
- Exprs . push ( this . parseSimpleExpr ( EntityType [ t ] ) )
772
- } else if ( this . CurrentToken . T === TokenType . IDS_EXPR ) {
773
- Exprs . push ( this . parseIdsExpr ( ) )
774
- } else if ( this . CurrentToken . T === TokenType . LEXRANGE_EXPR ) {
775
- Exprs . push ( this . parseLexrangeExpr ( ) )
776
- }
777
-
778
- this . nextToken ( )
779
- }
780
-
781
- return new ExpandExpr ( EntityType . TAG , Exprs , tagData )
782
- }
783
-
784
742
parseNumericExpr ( ) {
785
743
this . assertToken ( TokenType . NUMERIC )
786
744
@@ -846,13 +804,19 @@ function Parse(data: string): SearchExpr {
846
804
847
805
if ( p . CurrentToken ?. T === TokenType . NUMERIC ) {
848
806
return p . parseNumericExpr ( )
849
- } else if ( [ TokenType . UNION , TokenType . INTERSECT , TokenType . NOT , TokenType . OPTIONAL , TokenType . EXACT , TokenType . VECTOR ] . includes ( t ) ) {
807
+ } else if ( [
808
+ TokenType . UNION ,
809
+ TokenType . INTERSECT ,
810
+ TokenType . NOT ,
811
+ TokenType . OPTIONAL ,
812
+ TokenType . EXACT ,
813
+ TokenType . VECTOR ,
814
+ TokenType . TAG ,
815
+ ] . includes ( t ) ) {
850
816
return p . parseExpandExpr ( EntityType [ t ] )
851
- } else if ( p . CurrentToken . T === TokenType . TAG_EXPR ) {
852
- return p . parseTagExpr ( )
853
817
} else if ( p . CurrentToken . T === TokenType . GEO_EXPR ) {
854
818
return p . parseGeoExpr ( )
855
- } else if ( [ TokenType . FUZZY_EXPR , TokenType . WILDCARD_EXPR , TokenType . PREFIX_EXPR ] . includes ( t ) ) {
819
+ } else if ( [ TokenType . FUZZY , TokenType . WILDCARD , TokenType . PREFIX ] . includes ( t ) ) {
856
820
return p . parseSimpleExpr ( EntityType [ t ] )
857
821
} else if ( p . CurrentToken . T === TokenType . IDS_EXPR ) {
858
822
return p . parseIdsExpr ( )
@@ -899,6 +863,7 @@ function assertExpandEntity(t: EntityType) {
899
863
EntityType . OPTIONAL ,
900
864
EntityType . EXACT ,
901
865
EntityType . VECTOR ,
866
+ EntityType . TAG ,
902
867
] . includes ( t ) ) {
903
868
throw new Error ( `${ t } is not an expand entity` )
904
869
}
0 commit comments