]> ruin.nu Git - proglang.git/blobdiff - syntax.cf
removed NoType and EDefault and added assert
[proglang.git] / syntax.cf
index 313fa556810e0dff5de9602959cdb74cd81073b5..26408246305de004f448085d22bb717adca8736b 100644 (file)
--- a/syntax.cf
+++ b/syntax.cf
@@ -1,40 +1,66 @@
 
 -- ordinary rules
 
-True. Bool ::= "true" ;
-False. Bool ::= "false" ;
-
-SDecl.   Stm      ::= Type Ident "=" Exp ";" ;
-decl.    Stm      ::= Type Ident ";" ;
-define decl t v = SDecl t  v EDefault ;
-SExp.     Stm      ::= Exp ";" ;
-SBlock.   Stm      ::= "{" [Stm] "}" ;
-if.      Stm      ::= "if" "(" Exp ")" Stm ;
+
+True.    Bool ::= "true" ;
+False.   Bool ::= "false" ;
+
+TInt.   Type  ::= "int" ;
+TBool.  Type  ::= "bool" ;
+
+Program.  Stms ::= [Stm] ;
+
+
+SExp.      Stm      ::= Exp ";" ;
+SBlock.    Stm      ::= "{" [Stm] "}" ;
+declIntE.  Stm      ::= "int" Ident "=" Exp ";" ;
+declBoolE. Stm      ::= "bool" Ident "=" Exp ";" ;
+define declIntE x e = SDecl TInt x e;
+define declBoolE x e = SDecl TBool x e;
+declInt. Stm ::= "int" Ident ";" ;
+declBool. Stm ::= "bool" Ident ";" ;
+define declInt x  = SDecl TInt x (EInt 0);
+define declBool x = SDecl TBool x (EBool False);
+
+
+SWhile.   Stm      ::= "while" "(" Exp ")" Stm ;
 SIf.     Stm      ::= "if" "(" Exp ")" Stm "else" Stm ;
+if.      Stm      ::= "if" "(" Exp ")" Stm ;
 define if e s = SIf e s SNoop ;
-SWhile.   Stm      ::= "while" "(" Exp ")" Stm ;
+
 -- SFor.     Stm      ::= "for" "(" Stm Exp ";" Exp ")" Stm ;
 SPrint.   Stm      ::= "print" Exp ";" ;
 
+
+
 EAss.     Exp     ::= Ident "=" Exp;
+
 compExp.  Exp     ::= Exp1 Op0 Exp1 ;
 define compExp e1 o e2 = BiOpExp e1 o e2 ;
+
 op1.      Exp1    ::= Exp1 Op1 Exp2 ;
 define op1 e1 o e2 = BiOpExp e1 o e2 ;
+
 op2.      Exp2    ::= Exp2 Op2 Exp3 ;
 define op2 e1 o e2 = BiOpExp e1 o e2 ;
+
 postIncr. Exp3    ::= Ident "++" ;
 define postIncr i = EPost i Plus ;
+
 postDecr.    Exp3    ::= Ident "--" ;
 define postDecr i = EPost i Minus ;
+
 EVar.     Exp3    ::= Ident ;
 EInt.     Exp3    ::= Integer ;
-ENeg.     Exp3    ::= "-" Exp3 ;
--- ENot.     Exp3    ::= "!" Exp3 ;
 EBool.    Exp3    ::= Bool ;
+
+ENeg.     Exp3    ::= "-" Exp3 ;
+ENot.     Exp3    ::= "!" Exp3 ;
+
 EReadI.   Exp3    ::= "readInt" ;
 EReadB.   Exp3    ::= "readBool" ;
 
+
 coercions Exp 3 ;
 
 
@@ -43,7 +69,6 @@ coercions Exp 3 ;
 
 terminator Stm "" ;
 
-Program.  Stms ::= [Stm] ;
 
 Lt.  Op0 ::= "<" ;
 ELt. Op0 ::= "<=" ;
@@ -62,19 +87,17 @@ _. Op ::= Op2;
 _. Op ::= Op0;
 
 
-
-TInt.     Type  ::= "int" ;
-TBool.  Type  ::= "bool" ;
-
 -- pragmas
 
-internal ExpT. Exp ::= Type Exp ;
-internal SNoop. Stm ::= ;
-internal EDefault. Exp ::= ;
+-- internal ExpT. Exp ::= Type Exp ;
+-- internal EDefault. Exp ::= ;
 internal BiOpExp. Exp ::= Exp Op Exp ;
-internal NoType. Type ::= ;
+-- internal NoType. Type ::= ;
 internal EPost. Exp ::= Ident Op1 ;
 
+internal SNoop. Stm ::= ;
+internal SDecl. Stm ::= Type Ident "=" Exp ";" ;
+
 comment "/*" "*/" ;
 comment "//" ;