Skip to content

Commit c59aad9

Browse files
committed
- Use exampd parser to parse tag expressions as well.
- Don't prefix simple expressions with '_EXPR' to keep in par with the entity names of the same.
1 parent 3ab4d54 commit c59aad9

File tree

1 file changed

+33
-68
lines changed
  • redisinsight/ui/src/packages/ri-explain/src

1 file changed

+33
-68
lines changed

redisinsight/ui/src/packages/ri-explain/src/parser.ts

Lines changed: 33 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@ enum TokenType {
1212
NOT = 'NOT',
1313
OPTIONAL = 'OPTIONAL',
1414
EXACT = 'EXACT',
15+
TAG = 'TAG',
1516
VECTOR = 'VECTOR',
16-
FUZZY_EXPR = 'FUZZY',
17-
WILDCARD_EXPR = 'WILDCARD',
18-
PREFIX_EXPR = 'PREFIX',
17+
FUZZY = 'FUZZY',
18+
WILDCARD = 'WILDCARD',
19+
PREFIX = 'PREFIX',
1920
GEO_EXPR = 'GEO_EXPR',
20-
TAG_EXPR = 'TAG_EXPR',
2121
IDS_EXPR = 'IDS_EXPR',
2222
LEXRANGE_EXPR = 'LEXRANGE_EXPR',
2323
NUMERIC = 'NUMERIC',
@@ -64,7 +64,7 @@ const KEYWORDS = {
6464
[TokenType.OPTIONAL.toString()]: TokenType.OPTIONAL,
6565
[TokenType.EXACT.toString()]: TokenType.EXACT,
6666
[TokenType.VECTOR.toString()]: TokenType.VECTOR,
67-
[TokenType.TAG_EXPR.toString()]: TokenType.TAG_EXPR,
67+
[TokenType.TAG.toString()]: TokenType.TAG,
6868
[TokenType.NUMERIC.toString()]: TokenType.NUMERIC,
6969

7070
'inf': TokenType.NUMBER,
@@ -233,13 +233,13 @@ class Lexer {
233233
const literal = this.ReadIdentifier()
234234
let tokenType = KEYWORDS[literal] || TokenType.IDENTIFIER
235235
if (literal.startsWith('TAG:')) {
236-
tokenType = TokenType.TAG_EXPR
236+
tokenType = TokenType.TAG
237237
} else if (literal === 'FUZZY') {
238-
tokenType = TokenType.FUZZY_EXPR
238+
tokenType = TokenType.FUZZY
239239
} else if (literal === 'WILDCARD') {
240-
tokenType = TokenType.WILDCARD_EXPR
240+
tokenType = TokenType.WILDCARD
241241
} else if (literal === 'PREFIX') {
242-
tokenType = TokenType.PREFIX_EXPR
242+
tokenType = TokenType.PREFIX
243243
} else if (literal === 'IDS') {
244244
tokenType = TokenType.IDS_EXPR
245245
} else if (literal === 'LEXRANGE') {
@@ -290,6 +290,7 @@ export enum EntityType {
290290
WILDCARD = 'WILDCARD',
291291
PREFIX = 'PREFIX',
292292
TEXT = 'TEXT',
293+
NUMBER = 'NUMBER',
293294
TAG = 'TAG',
294295

295296
IDS = 'IDS',
@@ -352,7 +353,6 @@ export function GetAncestors(info: EntityInfo, searchId: string, a: IAncestors):
352353

353354
class Expr {
354355
Core: string
355-
Type: EntityType
356356
SubType: EntityType
357357
Time?: string
358358
Info?: string
@@ -537,18 +537,26 @@ class Parser {
537537
Exprs.push(this.parseNumericExpr())
538538
} else if (this.CurrentToken?.T === TokenType.IDENTIFIER) {
539539
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)) {
541549
Exprs.push(this.parseExpandExpr(EntityType[t]))
542-
} else if (this.CurrentToken.T === TokenType.TAG_EXPR) {
543-
Exprs.push(this.parseTagExpr())
544550
} else if (this.CurrentToken.T === TokenType.GEO_EXPR) {
545551
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)) {
547553
Exprs.push(this.parseSimpleExpr(EntityType[t]))
548554
} else if (this.CurrentToken.T === TokenType.IDS_EXPR) {
549555
Exprs.push(this.parseIdsExpr())
550556
} else if (this.CurrentToken.T === TokenType.LEXRANGE_EXPR) {
551557
Exprs.push(this.parseLexrangeExpr())
558+
} else if (this.CurrentToken.T === TokenType.NUMBER) {
559+
Exprs.push(new Expr(this.CurrentToken.Data.toString(), EntityType.NUMBER))
552560
}
553561

554562
this.nextToken()
@@ -731,56 +739,6 @@ class Parser {
731739
return new Expr(`${first},${second} --> ${third} ${metric}`, EntityType.GEO, identifierData)
732740
}
733741

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-
784742
parseNumericExpr() {
785743
this.assertToken(TokenType.NUMERIC)
786744

@@ -846,13 +804,19 @@ function Parse(data: string): SearchExpr {
846804

847805
if (p.CurrentToken?.T === TokenType.NUMERIC) {
848806
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)) {
850816
return p.parseExpandExpr(EntityType[t])
851-
} else if (p.CurrentToken.T === TokenType.TAG_EXPR) {
852-
return p.parseTagExpr()
853817
} else if (p.CurrentToken.T === TokenType.GEO_EXPR) {
854818
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)) {
856820
return p.parseSimpleExpr(EntityType[t])
857821
} else if (p.CurrentToken.T === TokenType.IDS_EXPR) {
858822
return p.parseIdsExpr()
@@ -899,6 +863,7 @@ function assertExpandEntity(t: EntityType) {
899863
EntityType.OPTIONAL,
900864
EntityType.EXACT,
901865
EntityType.VECTOR,
866+
EntityType.TAG,
902867
].includes(t)) {
903868
throw new Error(`${t} is not an expand entity`)
904869
}

0 commit comments

Comments
 (0)