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>

@