@@ -36,13 +36,13 @@ class Syntax(val input : ParserInput) extends Parser {
36
36
OrOrElseRule | NotRule
37
37
}
38
38
def OrOrElseRule = rule {
39
- AndOrElseRule ~ zeroOrMore(" ||" ~ AndOrElseRule ~> OrExpr )
39
+ AndOrElseRule ~ zeroOrMore(Whitespace ~ " ||" ~ Whitespace ~ AndOrElseRule ~> OrExpr )
40
40
}
41
41
def AndOrElseRule = rule {
42
- XorOrElseRule ~ zeroOrMore(" &&" ~ XorOrElseRule ~> AndExpr )
42
+ XorOrElseRule ~ zeroOrMore(Whitespace ~ " &&" ~ Whitespace ~ XorOrElseRule ~> AndExpr )
43
43
}
44
44
def XorOrElseRule = rule {
45
- Factor ~ zeroOrMore(" %%" ~ Factor ~> XorExpr )
45
+ Factor ~ zeroOrMore(Whitespace ~ " %%" ~ Whitespace ~ Factor ~> XorExpr )
46
46
}
47
47
48
48
// Handling parentheses.
@@ -57,18 +57,30 @@ class Syntax(val input : ParserInput) extends Parser {
57
57
EqualRule | NotEqualRule | GreaterThanRule | GreaterOrEqual |
58
58
LessThan | LessOrEqual | Like | IsTrue
59
59
}
60
- def EqualRule = rule { FieldReferenceRule ~ " =" ~ Literal ~> EqualExpr }
61
- def NotEqualRule = rule { FieldReferenceRule ~ " !=" ~ Literal ~> NotEqualExpr }
62
- def GreaterThanRule = rule { FieldReferenceRule ~ " >" ~ Literal ~> GreaterThanExpr }
63
- def GreaterOrEqual = rule { FieldReferenceRule ~ " >=" ~ Literal ~> GreaterOrEqualExpr }
64
- def LessThan = rule { FieldReferenceRule ~ " <" ~ Literal ~> LessThanExpr }
65
- def LessOrEqual = rule { FieldReferenceRule ~ " <=" ~ Literal ~> LessOrEqualExpr }
66
- def Like = rule { FieldReferenceRule ~ " %" ~ Literal ~> LikeExpr }
60
+ def EqualRule = rule { FieldReferenceRule ~ Whitespace ~ " =" ~ Whitespace ~ Literal ~> EqualExpr }
61
+ def NotEqualRule = rule { FieldReferenceRule ~ Whitespace ~ " !=" ~ Whitespace ~ Literal ~> NotEqualExpr }
62
+ def GreaterThanRule = rule { FieldReferenceRule ~ Whitespace ~ " >" ~ Whitespace ~ IntegerLiteral ~> GreaterThanExpr }
63
+ def GreaterOrEqual = rule { FieldReferenceRule ~ Whitespace ~ " >=" ~ Whitespace ~ IntegerLiteral ~> GreaterOrEqualExpr }
64
+ def LessThan = rule { FieldReferenceRule ~ Whitespace ~ " <" ~ Whitespace ~ IntegerLiteral ~> LessThanExpr }
65
+ def LessOrEqual = rule { FieldReferenceRule ~ Whitespace ~ " <=" ~ Whitespace ~ IntegerLiteral ~> LessOrEqualExpr }
66
+ def Like = rule { FieldReferenceRule ~ Whitespace ~ " %" ~ Whitespace ~ StringLiteral ~> LikeExpr }
67
67
def IsTrue = rule { FieldReferenceRule ~> IsTrueExpr }
68
68
69
69
// Literals
70
70
def FieldReferenceRule = rule { " [" ~ capture(oneOrMore(CharPredicate .AlphaNum ++ '-' ++ ' ' ++ '_' ++ '(' ++ ':' ++ ')' )) ~ " ]" ~> FieldReference }
71
- def Literal = rule { capture(oneOrMore(CharPredicate .AlphaNum )) ~> (_.toString) }
71
+
72
+ def IntegerLiteral = rule { capture(oneOrMore(CharPredicate .Digit )) }
73
+ def StringLiteral = rule { '"' ~ capture(oneOrMore(CharPredicate .AlphaNum )) ~ '"' }
74
+
75
+ def Literal = rule { (IntegerLiteral | StringLiteral ) ~> (_.toString) }
76
+
77
+ def Whitespace = rule {
78
+ zeroOrMore(anyOf(" \n \r " ))
79
+ }
80
+
81
+ def OneOrMoreWhitespace = rule {
82
+ oneOrMore(anyOf(" \n \r " ))
83
+ }
72
84
}
73
85
74
86
0 commit comments