]> ruin.nu Git - proglang.git/blob - syntax.cf
initial commit
[proglang.git] / syntax.cf
1
2 -- ordinary rules
3
4 BTrue. BoolT ::= "true" ;
5 BFalse. BoolT ::= "false" ;
6
7 SDecl.    Stm      ::= Typ Var ";" ;
8 --SAss.     Stm      ::= Ident "=" Exp  ";"  ;
9 SExp.     Stm      ::= Exp ";" ;
10 SBlock.   Stm      ::= "{" [Stm] "}" ;
11 SIf.      Stm      ::= "if" "(" Exp ")" Stm ;
12 SIfE.     Stm      ::= "if" "(" Exp ")" Stm "else" Stm ;
13 SWhile.   Stm      ::= "while" "(" Exp ")" Stm ;
14 -- SFor.     Stm      ::= "for" "(" Stm Exp ";" Exp ")" Stm ;
15 SPrint.   Stm      ::= "print" Exp ";" ;
16
17 VVar.     Var      ::= Ident ;
18 VAss.     Var      ::= Ident "=" Exp;
19
20 ELt.      Exp     ::= Exp1 "<" Exp1 ;
21 EELt.     Exp     ::= Exp1 "<=" Exp1 ;
22 EGt.      Exp     ::= Exp1 ">" Exp1 ;
23 EEGt.     Exp     ::= Exp1 ">=" Exp1 ;
24 EEq.      Exp     ::= Exp1 "==" Exp1 ;
25 ENEq.     Exp     ::= Exp1 "!=" Exp1 ;
26 EPlus.    Exp1    ::= Exp1 "+" Exp2 ;
27 EMinus.   Exp1    ::= Exp1 "-" Exp2 ;
28 ETimes.   Exp2    ::= Exp2 "*" Exp3 ;
29 EDiv.     Exp2    ::= Exp2 "/" Exp3 ;
30 EIncr.    Exp3    ::= Ident "++" ;
31 EDecr.    Exp3    ::= Ident "--" ;
32 EVar.     Exp3    ::= Var ;
33 EInt.     Exp3    ::= Integer ;
34 ENeg.     Exp3    ::= "-" Exp3 ;
35 EBool.    Exp3    ::= BoolT ;
36 EReadI.   Exp3    ::= "readInt" ;
37 EReadB.   Exp3    ::= "readBool" ;
38
39 coercions Exp 3 ;
40
41
42 _.        Stm     ::= Stm ";" ;
43
44
45 terminator Stm "" ;
46
47 Program.  Stms ::= [Stm] ;
48
49
50 TInt.     Typ  ::= "int" ;
51 TBool.  Typ  ::= "bool" ;
52
53 -- pragmas
54
55 internal ExpT. Exp ::= Typ Exp ;
56
57 comment "/*" "*/" ;
58 comment "//" ;
59
60 entrypoints Stms, Exp ;