@@ -23,6 +23,12 @@ class PrecedenceParsersTest {
23
23
object Divide extends Op {
24
24
override def toString = " /"
25
25
}
26
+ object LT extends Op {
27
+ override def toString = " <"
28
+ }
29
+ object GT extends Op {
30
+ override def toString = " >"
31
+ }
26
32
object Equals extends Op {
27
33
override def toString = " ="
28
34
}
@@ -39,9 +45,18 @@ class PrecedenceParsersTest {
39
45
val prec = List (
40
46
(Associativity .Left , List (Mult , Divide )),
41
47
(Associativity .Left , List (Plus , Minus )),
48
+ (Associativity .Non , List (LT , GT )),
42
49
(Associativity .Right , List (Equals )))
43
50
def integer : Parser [Leaf ] = " [0-9]+" .r ^^ { (s : String ) => Leaf (s.toInt) }
44
- def binop : Parser [Op ] = " +" ^^^ Plus | " -" ^^^ Minus | " *" ^^^ Mult | " /" ^^^ Divide | " =" ^^^ Equals
51
+ def binop : Parser [Op ] = {
52
+ " +" ^^^ Plus |
53
+ " -" ^^^ Minus |
54
+ " *" ^^^ Mult |
55
+ " /" ^^^ Divide |
56
+ " <" ^^^ LT |
57
+ " >" ^^^ GT |
58
+ " =" ^^^ Equals
59
+ }
45
60
def token : Parser [Token ] = integer | binop
46
61
def expression = new PrecedenceParser (integer, binop, prec, Binop .apply)
47
62
}
@@ -73,6 +88,11 @@ class PrecedenceParsersTest {
73
88
}
74
89
}
75
90
91
+ @ Test
92
+ def testNonAssoc (): Unit = {
93
+ testExp(Binop (Leaf (1 ), LT , Leaf (2 )), " 1 < 2 < 3" , List [Token ](LT , Leaf (3 )));
94
+ }
95
+
76
96
@ Test
77
97
def testGracefulEnd (): Unit = {
78
98
testExp(Leaf (4 ), " 4 +" , List [Token ](Plus ));
0 commit comments