19.11.2014 Views

The Fortress Language Specification - CiteSeerX

The Fortress Language Specification - CiteSeerX

The Fortress Language Specification - CiteSeerX

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Extends ::= extends TraitTypes<br />

Excludes ::= excludes TraitTypes<br />

Comprises ::= comprises MayTraitTypes<br />

TraitTypes ::= TraitType<br />

| { TraitTypeList }<br />

TraitTypeList ::= TraitType ( , TraitType) ∗<br />

MayTraitTypes ::= {}<br />

| TraitTypes<br />

Where ::= where { WhereClauseList }<br />

WhereClauseList ::= WhereClause ( , WhereClause) ∗<br />

WhereClause ::= Id Extends<br />

| TypeAlias<br />

| NatConstranint<br />

| IntConstranint<br />

| BoolConstraint<br />

| UnitConstraint<br />

| TypeRef coerces TypeRef<br />

| TypeRef widens TypeRef<br />

ObjectDecl ::= ObjectHeader (MdDef | FldDef | PropertyDecl) ∗ end<br />

ObjectHeader ::= ObjectMod ∗ object Id [StaticParams] [([ObjectParams])] [Extends] FnClauses<br />

ObjectParams ::= ObjectParam(,ObjectParam) ∗<br />

| [ObjectParam(,ObjectParam) ∗ , ] ObjectVarargs<br />

| [ObjectParam(,ObjectParam) ∗ , ] [ObjectVarargs,] ObjectKeyword ( , ObjectKeyword) ∗<br />

ObjectVarargs ::= transient Id : TypeRef ...<br />

ObjectKeyword ::= ObjectParam=Expr<br />

ObjectParam ::= FldMod ∗ PlainParam<br />

| transient PlainParam<br />

FnDecl ::= AbsFnDecl<br />

| FnDef<br />

AbsFnDecl ::= FnMod ∗ FnHeader<br />

| Name : ArrowType<br />

FnDef ::= FnMod ∗ FnHeader = Expr<br />

FnHeader ::= Id [StaticParams] ValParam [IsType] FnClauses<br />

| OpHeader<br />

OpHeader ::= opr Op [StaticParams] ValParam [IsType] FnClauses<br />

| opr [StaticParams] ValParam Op [IsType] FnClauses<br />

| opr [StaticParams] LeftEncloser ValParams RightEncloser [ := ValParam] [IsType] FnClauses<br />

ValParam ::= ParamId<br />

| ([ValParams])<br />

ParamId ::= Id<br />

|<br />

ValParams ::= PlainParam( , PlainParam) ∗<br />

| [PlainParam( , PlainParam) ∗ , ] Id : TypeRef ...<br />

| [PlainParam( , PlainParam) ∗ , ] [Id : TypeRef ... , ] PlainParam = Expr ( , PlainParam=Expr) ∗<br />

PlainParam ::= ParamId [IsType]<br />

| TypeRef<br />

IsType ::= : TypeRef<br />

FnClauses ::= [Throws] [Where] [Contract]<br />

Throws ::= throws MayTraitTypes<br />

Contract ::= [Requires] [Ensures] [Invariant]<br />

Requires ::= requires Expr +<br />

Ensures ::= ensures (Expr + [provided Expr]) +<br />

Invariant ::= invariant Expr + 377

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!