Mercurial Hosting > luan
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()) ) ) ); }