]> ruin.nu Git - proglang.git/blobdiff - syntax.cf
streamlined the binary operators
[proglang.git] / syntax.cf
index 8bb36219c11d1b7daeeeeaf9065a534d37f8345b..313fa556810e0dff5de9602959cdb74cd81073b5 100644 (file)
--- a/syntax.cf
+++ b/syntax.cf
@@ -17,11 +17,12 @@ SWhile.   Stm      ::= "while" "(" Exp ")" Stm ;
 SPrint.   Stm      ::= "print" Exp ";" ;
 
 EAss.     Exp     ::= Ident "=" Exp;
-BExp.     Exp     ::= Exp1 BOp Exp1 ;
+compExp.  Exp     ::= Exp1 Op0 Exp1 ;
+define compExp e1 o e2 = BiOpExp e1 o e2 ;
 op1.      Exp1    ::= Exp1 Op1 Exp2 ;
-define op1 e1 o e2 = OpExp e1 o e2 ;
+define op1 e1 o e2 = BiOpExp e1 o e2 ;
 op2.      Exp2    ::= Exp2 Op2 Exp3 ;
-define op2 e1 o e2 = OpExp e1 o e2 ;
+define op2 e1 o e2 = BiOpExp e1 o e2 ;
 postIncr. Exp3    ::= Ident "++" ;
 define postIncr i = EPost i Plus ;
 postDecr.    Exp3    ::= Ident "--" ;
@@ -29,6 +30,7 @@ define postDecr i = EPost i Minus ;
 EVar.     Exp3    ::= Ident ;
 EInt.     Exp3    ::= Integer ;
 ENeg.     Exp3    ::= "-" Exp3 ;
+-- ENot.     Exp3    ::= "!" Exp3 ;
 EBool.    Exp3    ::= Bool ;
 EReadI.   Exp3    ::= "readInt" ;
 EReadB.   Exp3    ::= "readBool" ;
@@ -43,12 +45,12 @@ terminator Stm "" ;
 
 Program.  Stms ::= [Stm] ;
 
-Lt.  BOp ::= "<" ;
-ELt. BOp ::= "<=" ;
-Gt.  BOp ::= ">" ;
-EGt. BOp ::= ">=" ;
-Eq.  BOp ::= "==" ;
-NEq. BOp ::= "!=" ;
+Lt.  Op0 ::= "<" ;
+ELt. Op0 ::= "<=" ;
+Gt.  Op0 ::= ">" ;
+EGt. Op0 ::= ">=" ;
+Eq.  Op0 ::= "==" ;
+NEq. Op0 ::= "!=" ;
 
 Plus.  Op1 ::= "+" ;
 Minus. Op1 ::= "-" ;
@@ -57,6 +59,7 @@ Div.   Op2 ::= "/" ;
 
 _. Op ::= Op1;
 _. Op ::= Op2;
+_. Op ::= Op0;
 
 
 
@@ -68,7 +71,7 @@ TBool.  Type  ::= "bool" ;
 internal ExpT. Exp ::= Type Exp ;
 internal SNoop. Stm ::= ;
 internal EDefault. Exp ::= ;
-internal OpExp. Exp ::= Exp Op Exp ;
+internal BiOpExp. Exp ::= Exp Op Exp ;
 internal NoType. Type ::= ;
 internal EPost. Exp ::= Ident Op1 ;