diff src/luan/interp/LuaParser.java @ 8:8896068e0a4b

finish operators git-svn-id: https://luan-java.googlecode.com/svn/trunk@9 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Wed, 21 Nov 2012 06:57:09 +0000
parents bca8fc5d928b
children 600676034a1a
line wrap: on
line diff
--- a/src/luan/interp/LuaParser.java	Tue Nov 20 10:06:27 2012 +0000
+++ b/src/luan/interp/LuaParser.java	Wed Nov 21 06:57:09 2012 +0000
@@ -38,16 +38,27 @@
 
 	Rule RelExpr() {
 		return Sequence(
-			SumExpr(),
+			ConcatExpr(),
 			ZeroOrMore(
 				FirstOf(
-					Sequence( "==", Spaces(), SumExpr(), push( new EqExpr((Expr)pop(1),(Expr)pop()) ) ),
-					Sequence( "~=", Spaces(), SumExpr(), push( new NotExpr(new EqExpr((Expr)pop(1),(Expr)pop())) ) )
+					Sequence( "==", Spaces(), ConcatExpr(), push( new EqExpr((Expr)pop(1),(Expr)pop()) ) ),
+					Sequence( "~=", Spaces(), ConcatExpr(), push( new NotExpr(new EqExpr((Expr)pop(1),(Expr)pop())) ) ),
+					Sequence( "<=", Spaces(), ConcatExpr(), push( new LeExpr((Expr)pop(1),(Expr)pop()) ) ),
+					Sequence( ">=", Spaces(), ConcatExpr(), push( new LeExpr((Expr)pop(),(Expr)pop()) ) ),
+					Sequence( "<", Spaces(), ConcatExpr(), push( new LtExpr((Expr)pop(1),(Expr)pop()) ) ),
+					Sequence( ">", Spaces(), ConcatExpr(), push( new LtExpr((Expr)pop(),(Expr)pop()) ) )
 				)
 			)
 		);
 	}
 
+	Rule ConcatExpr() {
+		return Sequence(
+			SumExpr(),
+			Optional( "..", Spaces(), ConcatExpr(), push( new ConcatExpr((Expr)pop(1),(Expr)pop()) ) )
+		);
+	}
+
 	Rule SumExpr() {
 		return Sequence(
 			TermExpr(),
@@ -75,10 +86,17 @@
 
 	Rule UnaryExpr() {
 		return FirstOf(
-			Sequence( '#', Spaces(), SingleExpr(), push( new LenExpr((Expr)pop()) ) ),
-			Sequence( '-', Spaces(), SingleExpr(), push( new UnmExpr((Expr)pop()) ) ),
-			Sequence( "not", Spaces(), SingleExpr(), push( new NotExpr((Expr)pop()) ) ),
-			SingleExpr()
+			Sequence( '#', Spaces(), PowExpr(), push( new LenExpr((Expr)pop()) ) ),
+			Sequence( '-', Spaces(), PowExpr(), push( new UnmExpr((Expr)pop()) ) ),
+			Sequence( "not", Spaces(), PowExpr(), push( new NotExpr((Expr)pop()) ) ),
+			PowExpr()
+		);
+	}
+
+	Rule PowExpr() {
+		return Sequence(
+			SingleExpr(),
+			Optional( '^', Spaces(), PowExpr(), push( new PowExpr((Expr)pop(1),(Expr)pop()) ) )
 		);
 	}