19.11.2014 Views

The Fortress Language Specification - CiteSeerX

The Fortress Language Specification - CiteSeerX

The Fortress Language Specification - CiteSeerX

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

VarDecl ::= Vars ( = |:= ) Expr<br />

| VarWTypes<br />

| VarWoTypes : TypeRef ... [( = | := ) Expr]<br />

| VarWoTypes : SimpleTupleType [( = | := ) Expr]<br />

Vars ::= Var<br />

| ( Var ( , Var) + )<br />

Var ::= VarMod ∗ Id [IsType]<br />

VarWTypes ::= VarWType<br />

| ( VarWType ( , VarWType) + )<br />

VarWType ::= VarMod ∗ Id IsType<br />

VarWoTypes ::= VarWoType<br />

| ( VarWoType (, VarWoType) + )<br />

VarWoType ::= VarMod ∗ Id<br />

SimpleTupleType ::= ( TypeRef , TypeRefList )<br />

TypeRefList ::= TypeRef ( , TypeRef ) ∗<br />

DimUnitDecl ::= dim Id [ = DimRef ] [default Unit]<br />

| (unit | SI unit ) Id + [ : DimRef ] [ = Expr]<br />

| dim Id [ = DimRef ] (unit | SI unit ) Id + [ = Expr]<br />

TypeAlias ::= type Id [StaticParams] = TypeRef<br />

TestDecl ::= test Id [GeneratorList] = Expr<br />

PropertyDecl ::= property [Id = ] [∀ ValParam] Expr<br />

MdDecl ::= AbsMdDecl<br />

| MdDef<br />

AbsMdDecl ::= [abstract ] MdMod ∗ MdHeader<br />

MdDef ::= MdMod ∗ MdHeader = Expr<br />

| Coercion<br />

MdHeader ::= [(Id | self ) . ]Id [StaticParams]([MdParams])[IsType] FnClauses<br />

MdParams ::= MdParam(,MdParam) ∗<br />

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

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

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

| self<br />

| TypeRef<br />

Coercion ::= [widening ]coercion [StaticParams](Id IsType)CoercionClauses = Expr<br />

CoercionClauses ::= [Throws] [CoercionWhere] [Contract]<br />

CoercionWhere ::= where { CoercionWhereClauseList }<br />

CoercionWhereClauseList ::= CoercionWhereClause (, CoercionWhereClause) ∗<br />

CoercionWhereClause ::= WhereClause<br />

| TypeRef widens or coerces TypeRef<br />

AbsFldDecl ::= AbsFldMod ∗ Id IsType<br />

FldDef ::= FldMod ∗ Id [IsType] ( = |:= ) Expr<br />

UniversalMod ::= private | test<br />

TraitMod ::= value | UniversalMod<br />

ObjectMod ::= TraitMod<br />

FnMod ::= atomic | io | UniversalMod<br />

VarMod ::= var | UniversalMod<br />

MdMod ::= getter | setter | FnMod<br />

AbsFldMod ::= hidden | settable | wrapped | UniversalMod<br />

FldMod ::= var | AbsFldMod<br />

StaticParams ::= StaticParamList<br />

StaticParamList ::= StaticParam ( , StaticParam) ∗<br />

378

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

Saved successfully!

Ooh no, something went wrong!