Pattern Language Grammar
<file> ::= <module
clause>
<module clause> ::= Module { <module body> }
<module body> ::= <module body segment> <module body>
| <module body segment>
<module body segment> ::= <clause>
| <javadoc comment> <clause>
<clause> ::= <type clause>
| <request
clause>
| <event
clause>
| <library
clause>
|
<implementation clause>
<type clause> ::= Type <id> native
<qualified id>;
| Type <id> <type>;
<type> ::= <simple type>
| <simple type>[]
<simple type> ::= <id>
<request clause> ::= Request <id> { <in
params> <out param> }
<in params> ::= <in param> <in params>
| <empty>
<in param> ::= <javadoc comment> in <id> :
<type>;
<out param> ::= <javadoc comment> out <id> :
<type>;
<event clause> ::= Event <id> { <event
body> }
<event body> ::= <event param> <event body>
| <empty>
<event param> ::= <javadoc comment> contains <id> :
<type>;
<library clause> ::= Library <id> {
<library body> }
<library body> ::= <library body segment> <library body>
| <library body segment>
<library body segment> ::= <javadoc comment> <pattern clause>
| <javadoc comment> <event clause>
| <javadoc comment> <request clause>
<pattern clause> ::= Pattern <id> { <pattern
body> }
<pattern body> ::= <pattern body segment> <pattern body>
| <pattern body segment>
<pattern body segment> ::= <fires clause>
| <listens clause>
| <requests clause>
| <responses clause>
<fires clause> ::= fires <id list> ;
<listens clause> ::= listens <id list> ;
<requests clause> ::= requests <id list> ;
<responses clause> ::= responses <id list> ;
<id list> ::= <id> , <id list>
|
<id>
<implementation clause> ::= Implementation <id> implements
<qualified pattern id> { <implementation description>
<implementation body> }
<implementation description> ::= <display clause>
<description clause>
<implementation body> ::= <property clause> <implementation
body>
| <empty>
<property clause> ::= <javadoc comment> property <id>
: <type> <property description>
<property description> ::= ;
| { <editor clause> <display clause> <description
clause> }
<editor clause> ::= editor <simple type> ;
| <empty>
<display clause> ::= display <string> ;
| <empty>
<description clause> ::= desription <string> ;
| <empty>
<qualified pattern id> ::= <module id>.<library id>.<pattern
id>
| <library id>.<pattern id>
<module id> ::= <id>
<library id> ::= <id>
<pattern id> ::= <id>
<empty> ::=
<string> ::= "<characters>"
<id> ::= <letter>(<letters>|<digits>)
<qualified id> ::= <letter>(<letters>|<digits>|.)
<comment> ::= /*<characters>*/
<javadoc comment> ::= /**<characters>*/
| <empty>
@