[Pixelle-commit] SF.net SVN: pixelle: [66] trunk/pixelle/etc/Pixelle.g
Brought to you by:
dbrosius
|
From: <dbr...@us...> - 2008-06-24 04:15:04
|
Revision: 66
http://pixelle.svn.sourceforge.net/pixelle/?rev=66&view=rev
Author: dbrosius
Date: 2008-06-23 21:15:06 -0700 (Mon, 23 Jun 2008)
Log Message:
-----------
start embellishing the grammar
Modified Paths:
--------------
trunk/pixelle/etc/Pixelle.g
Modified: trunk/pixelle/etc/Pixelle.g
===================================================================
--- trunk/pixelle/etc/Pixelle.g 2008-06-23 22:14:25 UTC (rev 65)
+++ trunk/pixelle/etc/Pixelle.g 2008-06-24 04:15:06 UTC (rev 66)
@@ -55,20 +55,37 @@
pixelle :
expr {mv.visitInsn(Opcodes.DRETURN);mv.visitMaxs(0,0);cw.visitEnd();} ;
-expr
- : term
- ('+' term
- {mv.visitInsn(Opcodes.DADD);}
- | '-' term
- {mv.visitInsn(Opcodes.DSUB);})*;
-
-term
- : factor
- ('*' factor
- {mv.visitInsn(Opcodes.DMUL);}
- | '/' factor
- {mv.visitInsn(Opcodes.DDIV);})*;
+expr :
+ cond_expr ;
+
+cond_expr :
+ cond_or_expr ( '?' expr ':' expr )? ;
+
+cond_or_expr :
+ cond_and_expr ( '&&' cond_and_expr )* ;
+cond_and_expr :
+ eq_expr ( '||' eq_expr )* ;
+
+eq_expr :
+ rel_expr ( ('==' | '!=') rel_expr )* ;
+
+rel_expr :
+ add_expr ( rel_op add_expr )* ;
+
+rel_op :
+ ('<' '=')=>
+ | ('>' '=')=>
+ | '<'
+ | '>'
+ ;
+
+add_expr :
+ mul_expr (op=('+' | '-') mul_expr {mv.visitInsn("+".equals($op.text)?Opcodes.DADD:Opcodes.DSUB);})* ;
+
+mul_expr :
+ factor (op=('*' | '/') factor {mv.visitInsn("*".equals($op.text)?Opcodes.DMUL:Opcodes.DDIV);})* ;
+
factor
: NUMBER
{mv.visitLdcInsn(Double.valueOf($NUMBER.text));}
@@ -85,5 +102,4 @@
NUMBER : '0'..'9'+ ( '.' ('0'..'9'+))?;
NEWLINE:'\r'? '\n' ;
-
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|