\documentclass{scrreprt}   % instead of  \documentclass[a4paper]{article}
%\usepackage{graphicx}
% the following style (can also be included by copy and paste)
% tries to mimic the Framemaker layout used by the OMG standards,
% i.e.:
% - paper size 8.28x11 inch
% - text size 6.7x8in
% - times roman, helvetica, and courier as fonts
% - ragged right paragraph formatting
\usepackage{omg}
%\usepackage{url}
%\usepackage{pifont}
\usepackage{upquote}
\usepackage{alltt}
\usepackage{graphicx}

\begin{document}

\oclHeadingOne{Scope}
\oclHeadingOne{Conformance}
\oclHeadingOne{Normative References}
\oclHeadingOne{Terms and Definitions}
\oclHeadingOne{Symbols}
\oclHeadingOne{Additional Information}

\oclHeadingOne{Abstract Syntax}\label{ocl:AbstractSyntax}
\oclHeadingTwo{Pivot Abstract Syntax Model}
\input{../latex-gen/abstract-syntax}

\oclHeadingOne{Concrete Syntax}\label{ocl:ConcreteSyntax}

This clause describes the concrete syntax of the OCL. This allows modelers to write down OCL expressions in a standardized way. The trnasformation from the normative textual concrete syntax via a non-normative concrete syntax model to the normative absract syntax involves the conversions shown in Figure \ref{ocl:Conversions}.

\begin{figure}
  \begin{center}
    \includegraphics[width=4.5in]{Conversions.png}
  \end{center}
  \centering
%  \centerline{\Large\textbf{Example Figure}}
  \caption{This is an example figure caption}\label{ocl:Conversions}
\end{figure}

The source text characters are grouped into tokens by the lexer. The grammar is unfortunately not amenable to an unambiguous parse and so the parser result is an ambiguous concrete syntax tree. The disambiguator produces the unambiguous concrete syntax tree that the analyzer converts to the abstract syntax graph. The validator diagnoses well-formedness violations.

With the exception of the trivial characters and tokens representations, each representation conforms to a metamodel, grammar and eacg conversion realizes rules defined in this specification.

\begin{itemize}
\item The lexer realizes the Lexer Rules defined in this clause and Base.xtext, EssentialOCL.xtext and CompleteOCL.xtext.
\item The parser realizes the Parser Rules defined in this clause and Base.xtext, EssentialOCL.xtext and CompleteOCL.xtext.
\item Parser. The parser realizes the Parser Rules defined in this clause and Base.xtext, EssentialOCL.xtext and CompleteOCL.xtext.
\item The disambiguator perforns a CS to CS conversion replacing ambiguous CS elements by unambiguous CS elements. The disambiguation rules are provided in this clause and EssentialOCLCS2CS.ocl. Resolution of names are provided in ... and PivotLookup.ocl.
\item The analyzer performs a CS to AS conversion from unambiguous CS elements to AS elements. The conversion rules are provided in this clause and BaseCS2AS.ocl, EssentialOCLCS2AS.ocl, CompleteOCLCS2AS.ocl. Resolution of names are provided in ... and PivotLookup.ocl.
\item The validator performs an AS validity check using well-formedness rules embedded as constraints in the Abstract Syntax metamodel.
\item The Concrete Syntax Metamodel provides example classes for the non-normative intermediate representations created by the parser, refined by the disambiguator and used by the analyzer.  The CS is defined by BaseCS.uml, EssentialOCLCS.uml, CompleteOCLCS.uml.
\item The Abstract Syntax Metamodel defines the normative representations created by the analyzer and used for XMI interchange.  The AS is defined by Pivot.uml.
\end{itemize}

%A formal mapping from the concrete syntax to the abstract syntax from Clause \ref{ocl:AbstractSyntax} ``Abstract Syntax'' is given. Although not required, sub clause 9.6 describes a mapping from the abstract syntax to the concrete syntax. This allows one to produce a standard human readable version of any OCL expression that is represented as an instance of the abstract syntax. Sub clause \ref{ocl:ConcreteSyntax:Structure} ``Structure of the Concrete Syntax'' describes the structure of the grammar and the motivation for the use of an attribute grammar.

\oclHeadingTwo{Structure of the Concrete Syntax}\label{ocl:ConcreteSyntax:Structure}
The concrete syntax of OCL is described using an Annotated Extended Backus-Naur Form grammar whose syntax is defined in Clause \ref{ocl:AnnotatedEBNF}.

The concrete syntax is partitioned into Base OCL, Essential OCL and Complete OCL modules and further partitioned by the produced CS classes. The parser rules that produce each CS class are grouped together wih annotations to show how the ambiguous CS is populated. For ambiguous CS classes, CS2CS disambiguation rules define the disambiguation. For unambiguous CS classes, CS2AS rules define the mapping to the AS. For all CS classes attributes, associations and superclasses are identified.

%Each production in an attribute grammar may have synthesized attributes attached to it. The value of synthesized attributes of elements on the left hand side of a production rule is always derived from attributes of elements at the right hand side of that production rule. Each production may also have inherited attributes attached to it. The value of inherited attributes of elements on the right hand side of a production rule is always derived from attributes of elements on the left hand side of that production. In the attribute grammar that specifies the concrete syntax, every production rule is denoted using the EBNF formalism and annotated with synthesized and inherited attributes, and disambiguating rules. There are a number of special annotations, as follows.
\oclHeadingZero{Synthesized Attributes}
Each production rule has one synthesized attribute called ast (short for abstract syntax tree), that holds the instance of the
OCL Abstract Syntax that is returned by the rule. The type of ast is different for every rule, but it always is an element of
the abstract syntax. The type is stated with each production rule under the heading “Abstract Syntax Mapping.” The ast
attribute constitutes the formal mapping from concrete syntax to abstract syntax.
The motivation for the use of an attribute grammar is the easiness of the construction and the clarity of this mapping.
Note that each name in the EBNF format of the production rule is postfixed with ‘CS’ to clearly distinguish between the
concrete syntax elements and their abstract syntax counterparts.
\oclHeadingZero{Inherited Attributes}
Each production rule has one inherited attribute called env (short for environment), that holds a list of names that are
visible from the expression. All names are references to elements in the model. In fact, env is a name space environment
for the expression or expression part denoted according to the production rule. The type of the env attribute is
Environment, as shown in Figure 9.1. A number of operations are defined for this type. Their definitions and more details
on the Environment type can be found in sub clause 9.4. The manner in which both the ast and env attributes are
determined is given using OCL expressions.

Note that the contents of the env attribute are fully determined by the context of the OCL expression. When an OCL
expression is used as an invariant to class X, its environment will be different than in the case the expression is used as a
postcondition to an operation of class Y. In Clause 12 (“The Use of Ocl Expressions in UML Models”) the context of
OCL expressions is defined in detail.
\oclHeadingZero{Multiple Production Rules}
For some elements there is a choice of multiple production rules. In that case the EBNF format of each production rule is
prefixed by a capital letter between square brackets. The same prefix is used for the corresponding determination rules for
the ast and env attributes.
\oclHeadingZero{Multiple Occurrences of Production Names}
In some production rules the same element name is used more than once. To distinguish between these occurrences the
names will be postfixed by a number in square brackets, as in the following example.
CollectionRangeCS ::= OclExpressionCS[1] ‘..’ OclExpressionCS[2]
\oclHeadingZero{Disambiguating Rules}
Some of the production rules are syntactically ambiguous. For such productions disambiguating rules have been defined.
Using these rules, each production and thus the complete grammar becomes nonambiguous. For example in parsing a.b(),
there are at least three possible parsing solutions:
1. a is a VariableExpr (a reference to a let or an iterator variable)
2. a is an AttributeCallExp (self is implicit)
3. a is a NavigationCallExp (self is implicit)
A decision on which grammar production rule to use can only be made when the environment of the expression is taken
into account. The disambiguating rules describe these choices based on the environment and allow unambiguous parsing
of a.b(). In this case the rules (in plain English) would be:
• If a is a defined variable in the current scope, a is a VariableExp.
• If not, check self and all iterator variables in scope. The inner-most scope for which as is either
• an attribute with the name a, resulting in an AttributeCallExp, or
• an opposite association-end with the name a, resulting in a NavigationCallExp, defines the meaning of a.b().
• If neither of the above is true, the expression is illegal / incorrect and cannot be parsed.
Disambiguating rules may be based on the UML model to which the OCL expression is attached (e.g., does an attribute
exist or not). Because of this, the UML model must be available when an OCL expression is parsed, otherwise it cannot
be validated as a correct expression. The grammar is structured in such a way that at most one of the production rules will
fulfill all the disambiguating rules, thus ensuring that the grammar as a whole is unambiguous. The disambiguating rules
are written in OCL, and use some metaclasses and additional operations from UML.

\oclHeadingTwo{A Note to Tool Builders}
\oclHeadingThree{Parsing}
The grammar in this clause might not prove to be the most efficient way to directly construct a tool. Of course, a toolbuilder
is free to use a different parsing mechanism. He can, for example, first parse an OCL expression using a special
concrete syntax tree, and do the semantic validation against a UML model in a second pass. Also, error correction or
syntax directed editing might need hand-optimized grammars. This document does not prescribe any specific parsing
approach. The only restriction is that at the end of all processing a tool should be able to produce the same well-formed
instance of the abstract syntax, as would be produced by this grammar.
\oclHeadingThree{Visibility}
The OCL specification puts no restriction on the visibility declared for a property defined in the model (such as ‘private,’
‘protected,’ or ‘public’). In OCL, all model elements are considered visible. The reason for this is to allow a modeler to
specify constraints, even between ‘hidden’ elements. At the lowest implementation level this might be useful.
As a separate option OCL tools may enforce all UML visibility rules to support OCL expressions to be specified only
over visible model elements. Especially when a tool needs to generate code for runtime evaluation of OCL expressions,
this visibility enforcement is necessary.

\oclHeadingTwo{Base OCL}\label{ocl:BaseOCLConcreteSyntax}
\input{../latex-gen/base-cs}

\oclHeadingTwo{Essential OCL}\label{ocl:EssentialOCLConcreteSyntax}
\input{../latex-gen/essentialocl-cs}

\oclHeadingTwo{Complete OCL}\label{ocl:CompleteOCLConcreteSyntax}
\input{../latex-gen/completeocl-cs}

\oclHeadingTwo{Environment Definition}
The Environment type used in the rules for the concrete syntax is defined according to the following invariants and
additional operations. A diagrammatic view can be found in Figure 9.1. Environments can be nested, denoted by the
existence of a parent environment. Each environment keeps a list of named elements, that have a name a reference to a
ModelElement.

\oclHeadingTwo{Concrete to Abstract Syntax Mapping}
The mapping from concrete to abstract syntax is described as part of the grammar. It is described by adding a synthesized
attribute ast to each production that has the corresponding metaclass from the abstract syntax as its type. This allows the
mapping to be fully formalized within the attribute grammar formalism.

\oclHeadingTwo{Abstract Syntax to Concrete Syntax Mapping}
It is often useful to have a defined mapping from the abstract syntax to the concrete syntax. This mapping can be defined
by applying the production rules in sub clause 9.3 from left to right. As a general guideline nothing will be implicit (for
example, implicit collect, implicit use of object as set) and all iterator variables will be filled in completely. The mapping
is not formally defined in this document but should be obvious.

\oclHeadingOne{Evaluation Semantics}\label{ocl:EvaluationSemantics}
\oclHeadingTwo{Model}
\input{../latex-gen/evaluation-semantics}

\oclHeadingOne{OCL Standard Library}
This documentation on the OCL Standard Library is auto-generated from the
org.eclipse.ocl.pivot/model/OCL-2.5.oclstdlib that defines
the behaviour of the Pivot evaluator and the Xtext editors. It is similar to the OCL 2.4 functionality.
It is a prototype of functionality for OCL 2.5 where the use of models may eliminate ambiguities.
		
The library support for the Ecore and UML bindings in Luna has been upgraded so that the available operations
are similar to those documented here for the Pivot binding.
\oclHeadingTwo{Library Model}
\input{../latex-gen/ocl-standard-library}

%\chapter{The Models}
\input{../latex/the-models}

%\chapter{Annotated EBNF}
\input{../latex/annotated-ebnf}

\end{document}


