A Cool programozási nyelv

Szintaxis

Szintaxis

program ::= class;+
class       ::= class TYPE [inherits TYPE] is feature;* end
feature    ::= ID(formal,*) : TYPE is expr end
                   
| ID : TYPE [ <- expr ]
formal     ::= ID : TYPE
expr       ::= ID <- expr
                   | expr[@TYPE].ID(expr,+)
                   | ID(expr,+)
                   | if expr then expr else expr fi
                   | while expr loop expr pool
                   | begin expr;+ end
                   | let {ID : TYPE [ <- expr ],}+ in expr end
                   | case expr of {ID : TYPE => expr;}+ esac  
                   | new TYPE
                   | isvoid expr
                   | expr + expr
                   | expr - expr
                   | expr * expr
                   | expr / expr
                   | ~expr
                   | expr < expr
                   | expr <= expr
                   | expr = expr
                   | not expr
                   | (expr)
                   | ID
                   | integer
                   | string
                   | true
                   | false

Precedencia

A legerősebbtől leggyengébbig a következő a műveletek precedenciája:

.
@
~
isvoid
* /
+ -
<= < =
not
<-

Minden bináris művelet bal-asszociatív kivéve az értékadást, ami jobb-asszociatív, és a 4 összehasonlító műveletet, amelyek nem asszociatívak.