27.10.2014 Views

Implementing an OCL 2.0 Compiler for ... - ResearchGate

Implementing an OCL 2.0 Compiler for ... - ResearchGate

Implementing an OCL 2.0 Compiler for ... - ResearchGate

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Figure 6<br />

Capacity constraint – syntax tree<br />

First, the <strong>OCL</strong> compiler constructs the syntax tree (Fig. 6) using the grammar<br />

rules. The root is the <strong>OCL</strong>File node that is not the par of the <strong>OCL</strong> st<strong>an</strong>dard, but<br />

allows defining multiple packages in one validation source. The syntax tree shows<br />

the structure of the <strong>OCL</strong> source file in <strong>an</strong> expressive way. This expression<br />

contains <strong>an</strong> only constraint, namely, the capacityChecker invari<strong>an</strong>t constraint that<br />

contains a simple OclExpression to compare the value of <strong>an</strong> attribute (Capacity) to<br />

a literal (650). Second, the sem<strong>an</strong>tic <strong>an</strong>alysis processes the syntax tree. The nodes<br />

are decorated with type in<strong>for</strong>mation, <strong>an</strong>d the missing self reference is inserted<br />

(Fig. 7). This time each node in the syntax tree has its correct type, hence, the third<br />

step of sem<strong>an</strong>tic <strong>an</strong>alysis c<strong>an</strong> be skipped. At the end of the syntax tree <strong>an</strong>alysis the<br />

nodes has correct type in<strong>for</strong>mation (e.g. the type of the outermost OclExpression<br />

in Fig. 7 is Integer)<br />

Figure 7<br />

<strong>Compiler</strong> inserted self node<br />

The last step is the code generation from the syntax tree. The source code (Fig. 8)<br />

uses the concepts introduced earlier: a package is tr<strong>an</strong>s<strong>for</strong>med to a namespace, a

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!