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.

StaticParam ::= Id [Extends] [absorbs unit ]<br />

| nat Id<br />

| int Id<br />

| bool Id<br />

| dim Id<br />

| unit Id [ : DimRef ] [absorbs unit ]<br />

| opr Op<br />

| ident Id<br />

TypeRef ::= TraitType<br />

| TupleType<br />

| ArrowType<br />

| BottomType<br />

| ()<br />

| (TypeRef )<br />

| DimType<br />

TraitType ::= DottedId [StaticArgList ]<br />

| { TypeRef ↦→ TypeRef }<br />

| 〈 TypeRef 〉<br />

| TypeRef [ [ArraySize] ]<br />

| TypeRef [ MatrixSize ]<br />

ArraySize ::= Extent (, Extent) ∗<br />

Extent ::= NatRef<br />

| NatRef # NatRef<br />

MatrixSize ::= NatRef (× NatRef ) +<br />

TupleType ::= (TypeRef ( , TypeRef ) + )<br />

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

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

ArrowType ::= ArrowTypeRef → ArrowTypeRef [Throws]<br />

ArrowTypeRef ::= TypeRef (× TypeRef ) ∗<br />

| TypeRef ˆ Number<br />

DimType ::= DimRef<br />

| TypeRef DimRef | TypeRef · DimRef<br />

| TypeRef / DimRef | TypeRef per DimRef<br />

| TypeRef UnitRef | TypeRef · UnitRef<br />

| TypeRef / UnitRef | TypeRef per UnitRef<br />

| TypeRef in DimRef<br />

DimRef ::= Unity<br />

| DottedId<br />

| DimRef DimRef | DimRef · DimRef<br />

| DimRef / DimRef | DimRef per DimRef<br />

| DimRef ˆ NatRef | 1 / DimRef | (DimRef )<br />

| DUPreOp DimRef | DimRef DUPostOp<br />

UnitRef ::= dimensionless<br />

| DottedId<br />

| UnitRef UnitRef | UnitRef · UnitRef<br />

| UnitRef / UnitRef | UnitRef per UnitRef<br />

| UnitRef ˆNatRef | 1/ UnitRef | (UnitRef )<br />

| DUPreOp UnitRef | UnitRef DUPostOp<br />

DUPreOp ::= square | cubic | inverse<br />

DUPostOp ::= squared | cubed<br />

StaticArgList ::= StaticArg ( , StaticArg) ∗ 379

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

Saved successfully!

Ooh no, something went wrong!