@@ -36,13 +36,13 @@ class Syntax(val input : ParserInput) extends Parser {
3636 OrOrElseRule | NotRule
3737 }
3838 def OrOrElseRule = rule {
39- AndOrElseRule ~ zeroOrMore(" ||" ~ AndOrElseRule ~> OrExpr )
39+ AndOrElseRule ~ zeroOrMore(Whitespace ~ " ||" ~ Whitespace ~ AndOrElseRule ~> OrExpr )
4040 }
4141 def AndOrElseRule = rule {
42- XorOrElseRule ~ zeroOrMore(" &&" ~ XorOrElseRule ~> AndExpr )
42+ XorOrElseRule ~ zeroOrMore(Whitespace ~ " &&" ~ Whitespace ~ XorOrElseRule ~> AndExpr )
4343 }
4444 def XorOrElseRule = rule {
45- Factor ~ zeroOrMore(" %%" ~ Factor ~> XorExpr )
45+ Factor ~ zeroOrMore(Whitespace ~ " %%" ~ Whitespace ~ Factor ~> XorExpr )
4646 }
4747
4848 // Handling parentheses.
@@ -57,18 +57,30 @@ class Syntax(val input : ParserInput) extends Parser {
5757 EqualRule | NotEqualRule | GreaterThanRule | GreaterOrEqual |
5858 LessThan | LessOrEqual | Like | IsTrue
5959 }
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 }
6767 def IsTrue = rule { FieldReferenceRule ~> IsTrueExpr }
6868
6969 // Literals
7070 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+ }
7284}
7385
7486
0 commit comments