Abstract This document describes AsmL, a specification language based on abstract state machines. Foundations of Software Engineering Microsoft Research (c) Microsoft Corporation. All rights reserved. Contents 1 Introduction 6



Download 0.93 Mb.
Page25/25
Date28.01.2017
Size0.93 Mb.
#9776
1   ...   17   18   19   20   21   22   23   24   25

2.2Unit of compilation (assembly)


assembly ::= [ namespaceOrDecl ]
namespaceOrDecl ::= namespace | declaration
namespace ::= [ attributes ] namespace name
name ::= id { "." id }
declaration ::= import | type | member
import
::= import name [ "=" name ]

2.3Values, constructors and patterns

2.3.1Constructors


constructor ::= literal
| datatypeConstructor
| collectionConstructor

datatypeConstructor ::= [ new ] typeName [ "(" [ exps ] ")" ]

collectionConstructor ::= tupleExp | setExp | seqExp | mapExp
tupleExp
::= "(" exp "," exps ")"
setExp ::= "{" [ comprehension | exps | range ] "}"
seqExp ::= "[" [ comprehension | exps | range ] "]"
mapExp ::= "{" ( mapComprehension | mapExps | "->") "}"
range ::= exp ".." exp
comprehension
::= exp "|" binders
mapComprehension
::= maplet "|" binders
mapExps
::= maplet {"," maplet }
maplet ::= exp "->" exp

2.3.2Patterns


pat ::= "_"
| literal
| id [ as typeExp
| tuplePat
| datatypePat
| mapletPat

tuplePat ::= "(" pats ")"
datatypePat
::= typeName  [ "(" [ pats ] ")" ]
mapletPat
::= pat "->" pat
pats
::= pat { "," pat }

2.3.3Binders


binders ::= binder {"," binder}
binder ::= pat ( in | "=" ) exp [ where exp ]

2.4Type expressions


typeExp ::= optionType { or optionType }
optionType ::= atomicType [ "?" ]
atomicType ::= typeName | "(" typeExp { "," typeExp } ")"
typeName ::= name [ typeArgs ]
typeArgs       ::= of optionType   [ to optionType  ]
           | of "<" typeExp { "," typeExp } ">"

2.5Type declarations


type ::= [ attributes ] { typeModifier }
( class | structure | interface |
enum | delegate | constrainedType )

2.5.1Type Parameters


typeParams ::= of id [ to id ]
| of "<" typeParam {"," typeParam } ">"

typeParam ::= id [ typeRelations ]

2.5.2Type Relations


typeRelations ::= extends typeExps [ implements typeExps ] | implements typeExps

typeExps ::= typeExp { and typeExps }

2.5.3Interface


interface ::= interface id [ typeParams ] [ typeRelations ]
[ declaration ]

2.5.4Datatype declaration


class ::= [ enumerated ] class id [ typeParams ]
[ typeRelations ]
[ variantOrDecl ]
structure ::= structure id [ typeParams ]
[ typeRelations  ]
[ variantOrDecl ]

variantOrDecl ::= declaration | variant

variant ::= case id [ declaration ]

2.5.5Enumerations


enum ::= enum id [ extends typeExp ] [ element ]
element ::= id [ "=" exp ]

2.5.6Constrained Types


constrainedType ::= type id [ typeParams ] [ "=" valueExp ]
valueExp ::= typeExp [ where exp ]

2.6Members


member ::= [ attributes ] { memberModifier }
( constant | variable | method  |
constraint | property | event )

memberModifier ::= shared | virtual | override
| extendedMemberModifier

2.6.1Fields


constant ::= [ const ] id
( as typeExp [ "=" exp ] | "=" exp )

variable ::= var id ( as typeExp ["=" exp ] | "=" exp )

2.6.2Methods  


method ::= [ methodKind ] methodId [ typeParams ]
signature [ stm ]
methodKind ::= function | procedure
methodId ::= name | operator ( binaryOp | unaryOp )
signature ::= params [ result ]
result ::= as typeExp
params ::= "(" [ param { "," param } ] ")"
param ::= [ attributes ] [ paramModifier ]
[ id as ] typeExp

2.6.3Constraints


constraint ::= constraint [ label ] exp
label
::= ( id | literal ) ":"

2.7Statements and expressions


stm ::= local
| assert
| choice
| return
| operationalStm
| exp

exp ::= branchExp 
| exceptExp
| quantifierExp 
| selectExp
| binaryExp
| enum of type
| type of type
| do stm
| exploration

exps
::= exp { "," exp }

2.7.1Local fields


local ::= letBinder
| { localVariableModifier } localVar
letBinder
::= [ let ] pat "=" exp
localVar
::= ( var | initially ) id
( as typeExp ["=" exp ] | "=" exp )

2.7.2Assertion statements


assert ::= constraintrequire | ensure
require
::= require [ label ] exp
ensure ::= ensure [ label ] exp

2.7.3Nondeterministic choice statements


choice ::= choose [ unique ] binders  stm
[ ifnone stm ]

2.7.4Return statements


return   ::= return exp

2.7.5Conditional expressions


branchExp ::= ifExpr | matchExpr
ifExpr ::= if exp [ then ] stm
{ elseif exp [ then ] stm }
[ else stm ]
matchExp ::= match exp case [ otherwise stm ]
case ::= pat [ where exp ] ":" stm

2.7.6Try/catch expressions


exceptExp ::= try stm catch case
           | throw exp
| error exp

2.7.7Quantifying expressions


quantifierExp ::= forall binders  holds exp
| exists [ unique ] binders  

2.7.8Selection expressions


selectExp ::= selector comprehension [ifnone exp]
selector ::= any | the | min | max | sum

2.7.9Primary Expressions


binaryExp ::= primaryExp { binaryOp primaryExp }
primaryExp ::= unaryOp applyExp
| applyExp [ ( is | as )  typeExp ]
| resulting exp

unaryOp ::= not |  "-"
binaryOp ::= implies | and [ then ] | or [ else
| "*" | "/" | mod | "+" | "-"
| union | intersect | merge
| subset | subseteq | in | notin
| "=" | "<>" | "<" | ">" | "<=" | ">="
| eq | ne | lt | gt | lte | gte

2.7.10Apply expressions


applyExp ::= atomicExp { argList }
| mybase arglist { argList }
argList ::= "(" [ exps ] ")" | "." id [ typeArgs ] }

2.7.11Atomic expression


atomicExp  ::= constructor | me | value
| "(" exp ")"
| id [ typeArgs ]

2.8Runtime states


operationalStm ::= update
| parallelUpdate
| sequence
| skip

2.8.1Update statements


update     ::= applyExp ( ":=" | "*=" | "+=" ) exp
| add exp to applyExp
| remove exp [ from applyExp ]

2.8.2Parallel update blocks


parallelUpdate ::= forall binders stm

2.8.3Sequential blocks


sequence ::= step
step ::= step  [ label ] [ iterator ] stm
iterator ::= foreach binders
| for id "=" exp to exp
| while exp
| until ( exp | fixpoint )

2.8.4Exploration expressions


exploration ::= explore exp
| search exp

2.9.NET Compatibility

2.9.1Modifiers


typeModifier ::= extensibility | access

access ::= public | private | protected | internal extensibility ::= abstract | sealed

extendedMemberModifier ::= extensibility | access | primitive

paramModifier ::= primitive ref | primitive out
| out | inout

localVariableModifier ::= primitive

2.9.2Attributes


attributes ::= { attribute }
attribute ::= "[" [ target ] attributeConstructor
{ "," attributeConstructor } "]"
target ::= id ":"
attributeConstructor ::= id | id "(" attributeExps ")"
attributeExps ::= [ exps ] [ namedAttrArgs ]
namedAttrArgs ::= [ namedAttrArg { "," namedAttrArg } ]
namedAttrArg ::= id "=" exp

2.9.3Delegates


delegate ::= delegate id [ typeParams ]  signature

2.9.4Properties


property ::= property ( name | me ) [ params ] as typeExp
( setter [ getter ] | getter [ setter ] )
setter ::= set [ stm ]
getter ::= get [ stm ]

2.9.5Events


event ::= event name as typeExp
( adder [ remover ] | remover [ adder ] )
adder ::= add [ stm ]
remover ::= remove [ stm ]

Download 0.93 Mb.

Share with your friends:
1   ...   17   18   19   20   21   22   23   24   25




The database is protected by copyright ©ininet.org 2024
send message

    Main page