| \oclHeadingOne{Annotated EBNF}\label{ocl:AnnotatedEBNF} |
| |
| This exposition of the Concrete Syntax grammars in Clauses \ref{ocl:EssentialOCLConcreteSyntax} and \ref{ocl:CompleteOCLConcreteSyntax} uses an Annotated Extended Backus Naur Format that will be familiar to users of the Xtext tool. Since Xtext lacks a formal specification and (E)BNF has a variety of specifications, the form of Annotated BNF used in this specifiication is defined in this clause. |
| |
| |
| \oclHeadingTwo{Production Rules} |
| |
| A grammar comprises production rules, each of which comprises one or more terms. |
| |
| There are two kinds of porduction rule. |
| |
| Terminal or lexer rules aggregate one or more characters or terminal productions to yield a terminal productions. |
| |
| Terminal productions passed between lexer and parser are called tokens. |
| |
| Parser rules aggregate one or more tokens or parser pruductions to yeld another parser production token. |
| |
| One parser rule is distinguished as the start of the grammar. |
| |
| \oclHeadingTwo{Terminal terms} |
| |
| Terminal terms identify characters that must be present in the input. |
| |
| \oclHeadingThree{Keyword} |
| |
| A keyword is a literal sequence of characters. It is represented by the sequence of characters surrounded by single quotes. A single quote or backslash character are escaped by preceding backslash character. Tab, newline and carriage retirn are denoted by a backslash followed by a t, n or r respectively. |
| |
| e.g. \verb|'else'|. |
| |
| \oclHeadingThree{Character Range} |
| |
| A single character from an inclusive character range may be specified by two single character keywords separated by a dot-dot. |
| |
| e.g. \verb|'0'..'9'|. |
| |
| \oclHeadingThree{Negation} |
| |
| A single character inclusive production may be inverted to an exclusion by a preceding exclamation mark. |
| |
| e.g. \verb|!'\n'|. |
| |
| \oclHeadingThree{Until Range} |
| |
| \oclHeadingThree{Wildcard} |
| |
| \oclHeadingThree{Whitespace} |
| |
| |
| \oclHeadingTwo{Generic terms} |
| |
| \oclHeadingThree{Rule Call} |
| |
| \oclHeadingThree{Repetition} |
| |
| \oclHeadingThree{Alternation} |
| |
| \oclHeadingThree{Grouping} |
| |
| \oclHeadingTwo{Parser terms} |
| |
| \oclHeadingTwo{Annotation terms} |
| |
| \oclHeadingThree{Assignment} |
| |
| \oclHeadingThree{CrossReference} |
| |
| \oclHeadingThree{Typing} |
| |
| \oclHeadingThree{Action} |