Grammar of Dynamic View Type Specifications

In this appendix, you will find the grammar of dynamic view type specifications.

view-specification:view-header subscribe-listopt

 

view-header:view identifier view-typeopt paramsopt :

representationopt

 

view-type:is id

 

params:(param-listopt)

 

param-list:param

param , param-list

 

param:type-id id = expression

 

subscribe-list:subscribe-spec

subscribe-list subscribe_spec

 

subscribe_spec:subscribe originopt id conditionopt : action-listopt

 

condition:when expression

 

action-list:action-spec

action-list action-spec

 

action-spec:representation:

propagation

representation : represent identifier identifier

conditionopt : attr-listopt

propagation: propagate identifier conditionopt ;

 

attr-list:attr-spec

attr-list attr-spec

 

attr-spec: attr-type-id simple-path = expression

HyperRef simple-path = hyper-ref-expr

Collector simple-path = collector-expr ;

 

attr-type-id:type-id

mandatory optRef< identifier >

 

type-id:boolean

char

int

float

double

string

file

id

 

hyper-ref-expr:

{ path-spec -> identifier , expression }

{ identifier , expression }

collector-expr:path-spec -> identifier

 

path : simple-path

simple-path . path

 

simple-path: id

id [ integer-literal ]

 

representation-path:

path -> id

-> id

 

expression:( expression )

conditional-expression

logical-expression

relational-expression

arithmetic-expression

representation path

path

function-call-expression

literal

 

conditional-expression:expression ? expression : expression

 

logical-expression:expression && expression

expression || expression

! expression

expression in ( enumeration )

relational-expression:expression < expression

expression <= expression

expression == expression

expression >= expression

expression > expression

 

arithmetic-expression : expression + expression

expression - expression

expression * expression

expression / expression

 

function-call-expression : id ( expression-listopt )

 

id:[_a-zA-Z0-9]+

enumeration : literal-list

 

literal:boolean-literal

character-literal

integer-literal

float-literal

string-literal

 

boolean-literal:true

false

 

character-literal: [a-zA-Z0-9!@#$%^&*()_-+={}[]|\<>?,./‘:;”~]

integer-literal: signopt[0-9][0-9]*

float-literal: signopt[0-9][0-9]*.[0-9]* exponentopt

sign: +

|-

 

exponent: [Ee] signopt[0-9][0-9]*

 

string-literal: character-literal*