xref: /AOO41X/main/autodoc/source/parser_i/idl/cx_idlco.cxx (revision 78bc99aafea97f4987aed12e674c2d2f1166dd91)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 #include <precomp.h>
23 #include <s2_luidl/cx_idlco.hxx>
24 
25 
26 // NOT FULLY DECLARED SERVICES
27 #include <s2_luidl/cx_sub.hxx>
28 #include <s2_dsapi/cx_dsapi.hxx>
29 #include <tools/tkpchars.hxx>
30 #include <tokens/tkpstam2.hxx>
31 #include <s2_luidl/tk_ident.hxx>
32 #include <s2_luidl/tk_keyw.hxx>
33 #include <s2_luidl/tk_punct.hxx>
34 #include <s2_luidl/tokrecv.hxx>
35 #include <x_parse2.hxx>
36 
37 
38 namespace csi
39 {
40 namespace uidl
41 {
42 
43 
44 const intt C_nCppInitialNrOfStati = 400;
45 const intt C_nStatusSize = 128;
46 
47 
48 
49 const uintt nF_fin_Error = 1;
50 const uintt nF_fin_Ignore = 2;
51 const uintt nF_fin_Identifier = 3;
52 const uintt nF_fin_Keyword = 4;
53 const uintt nF_fin_Punctuation = 5;
54 const uintt nF_fin_EOL = 6;
55 const uintt nF_fin_EOF = 7;
56 
57 const uintt nF_goto_MLDocu = 10;
58 const uintt nF_goto_SLDocu = 11;
59 const uintt nF_goto_MLComment = 12;
60 const uintt nF_goto_SLComment = 13;
61 const uintt nF_goto_Praeprocessor = 14;
62 const uintt nF_goto_Assignment = 15;
63 
64 
65 
66 const UINT16 nTok_bty_any = 100 + TokBuiltInType::bty_any;
67 const UINT16 nTok_bty_boolean = 100 + TokBuiltInType::bty_boolean;
68 const UINT16 nTok_bty_byte = 100 + TokBuiltInType::bty_byte;
69 const UINT16 nTok_bty_char = 100 + TokBuiltInType::bty_char;
70 const UINT16 nTok_bty_double = 100 + TokBuiltInType::bty_double;
71 const UINT16 nTok_bty_hyper = 100 + TokBuiltInType::bty_hyper;
72 const UINT16 nTok_bty_long = 100 + TokBuiltInType::bty_long;
73 const UINT16 nTok_bty_short = 100 + TokBuiltInType::bty_short;
74 const UINT16 nTok_bty_string = 100 + TokBuiltInType::bty_string;
75 const UINT16 nTok_bty_void = 100 + TokBuiltInType::bty_void;
76 const UINT16 nTok_bty_ellipse = 100 + TokBuiltInType::bty_ellipse;
77 
78 const UINT16 nTok_tmod_unsigned = 200 + TokTypeModifier::tmod_unsigned;
79 const UINT16 nTok_tmod_sequence = 200 + TokTypeModifier::tmod_sequence;
80 
81 const UINT16 nTok_ph_in = 250 + TokParameterHandling::ph_in;
82 const UINT16 nTok_ph_out = 250 + TokParameterHandling::ph_out;
83 const UINT16 nTok_ph_inout = 250 + TokParameterHandling::ph_inout;
84 
85 const UINT16 nTok_mt_attribute = 300 + TokMetaType::mt_attribute;
86 const UINT16 nTok_mt_constants = 300 + TokMetaType::mt_constants;
87 const UINT16 nTok_mt_enum = 300 + TokMetaType::mt_enum;
88 const UINT16 nTok_mt_exception = 300 + TokMetaType::mt_exception;
89 const UINT16 nTok_mt_ident = 300 + TokMetaType::mt_ident;
90 const UINT16 nTok_mt_interface = 300 + TokMetaType::mt_interface;
91 const UINT16 nTok_mt_module = 300 + TokMetaType::mt_module;
92 const UINT16 nTok_mt_property = 300 + TokMetaType::mt_property;
93 const UINT16 nTok_mt_service = 300 + TokMetaType::mt_service;
94 const UINT16 nTok_mt_singleton = 300 + TokMetaType::mt_singleton;
95 const UINT16 nTok_mt_struct = 300 + TokMetaType::mt_struct;
96 const UINT16 nTok_mt_typedef = 300 + TokMetaType::mt_typedef;
97 const UINT16 nTok_mt_uik = 300 + TokMetaType::mt_uik;
98 
99 const UINT16 nTok_ste_bound = 400 + TokStereotype::ste_bound;
100 const UINT16 nTok_ste_constrained = 400 + TokStereotype::ste_constrained;
101 const UINT16 nTok_ste_const = 400 + TokStereotype::ste_const;
102 const UINT16 nTok_ste_maybeambiguous = 400 + TokStereotype::ste_maybeambiguous;
103 const UINT16 nTok_ste_maybedefault = 400 + TokStereotype::ste_maybedefault;
104 const UINT16 nTok_ste_maybevoid = 400 + TokStereotype::ste_maybevoid;
105 const UINT16 nTok_ste_oneway = 400 + TokStereotype::ste_oneway;
106 const UINT16 nTok_ste_optional = 400 + TokStereotype::ste_optional;
107 const UINT16 nTok_ste_readonly = 400 + TokStereotype::ste_readonly;
108 const UINT16 nTok_ste_removable = 400 + TokStereotype::ste_removable;
109 const UINT16 nTok_ste_virtual = 400 + TokStereotype::ste_virtual;
110 const UINT16 nTok_ste_transient = 400 + TokStereotype::ste_transient;
111 const UINT16 nTok_ste_published = 400 + TokStereotype::ste_published;
112 
113 const UINT16 nTok_raises = 501;
114 const UINT16 nTok_needs = 502;
115 const UINT16 nTok_observes = 503;
116 
117 const UINT16 nTok_assignment = 550;
118 
119 const UINT16 nTok_ignore = 600;
120 const UINT16 nTok_none_MLCommentBegin = 601;
121 const UINT16 nTok_none_SLCommentBegin = 602;
122 const UINT16 nTok_none_MLDocuBegin = 603;
123 const UINT16 nTok_none_SLDocuBegin = 604;
124 const UINT16 nTok_none_PraeprocessorBegin = 605;
125 
126 
127 const UINT16 nTok_punct_BracketOpen = 700 + TokPunctuation::BracketOpen;
128 const UINT16 nTok_punct_BracketClose = 700 + TokPunctuation::BracketClose;
129 const UINT16 nTok_punct_ArrayBracketOpen = 700 + TokPunctuation::ArrayBracketOpen;
130 const UINT16 nTok_punct_ArrayBracketClose = 700 + TokPunctuation::ArrayBracketClose;
131 const UINT16 nTok_punct_CurledBracketOpen = 700 + TokPunctuation::CurledBracketOpen;
132 const UINT16 nTok_punct_CurledBracketClose = 700 + TokPunctuation::CurledBracketClose;
133 const UINT16 nTok_punct_Semicolon = 700 + TokPunctuation::Semicolon;
134 const UINT16 nTok_punct_Colon = 700 + TokPunctuation::Colon;
135 const UINT16 nTok_punct_DoubleColon = 700 + TokPunctuation::DoubleColon;
136 const UINT16 nTok_punct_Comma = 700 + TokPunctuation::Comma;
137 const UINT16 nTok_punct_Minus = 700 + TokPunctuation::Minus;
138 const UINT16 nTok_punct_Fullstop = 700 + TokPunctuation::Fullstop;
139 const UINT16 nTok_punct_Lesser = 700 + TokPunctuation::Lesser;
140 const UINT16 nTok_punct_Greater = 700 + TokPunctuation::Greater;
141 
142 const UINT16 nTok_EOL = 801;
143 const UINT16 nTok_EOF = 802;
144 
145 
146 
Context_UidlCode(Token_Receiver & o_rReceiver,DYN TkpDocuContext & let_drContext_Docu)147 Context_UidlCode::Context_UidlCode( Token_Receiver &     o_rReceiver,
148                                     DYN TkpDocuContext & let_drContext_Docu )
149     :   aStateMachine(C_nStatusSize,C_nCppInitialNrOfStati),
150         pReceiver(&o_rReceiver),
151         pDocuContext(&let_drContext_Docu),
152         dpContext_MLComment(0),
153         dpContext_SLComment(0),
154         dpContext_Preprocessor(0),
155         dpContext_Assignment(0),
156         pNewToken(0),
157         pFollowUpContext(0)
158 {
159     dpContext_MLComment = new Context_MLComment(o_rReceiver,*this),
160     dpContext_SLComment = new Context_SLComment(o_rReceiver,*this),
161     dpContext_Preprocessor = new Context_Praeprocessor(o_rReceiver,*this),
162     dpContext_Assignment = new Context_Assignment(o_rReceiver,*this),
163 
164     pDocuContext->SetParentContext(*this,"*/");
165     SetupStateMachine();
166 }
167 
~Context_UidlCode()168 Context_UidlCode::~Context_UidlCode()
169 {
170 }
171 
172 void
ReadCharChain(CharacterSource & io_rText)173 Context_UidlCode::ReadCharChain( CharacterSource & io_rText )
174 {
175     pNewToken = 0;
176 
177     UINT16 nTokenId = 0;
178     StmBoundsStatu2 & rBound = aStateMachine.GetCharChain(nTokenId, io_rText);
179 
180     // !!!
181     //   The order of the next two lines is essential, because
182     //   pFollowUpContext may be changed by PerformStatusFunction() also,
183     //   which then MUST override the previous assignment.
184     pFollowUpContext = rBound.FollowUpContext();
185     PerformStatusFunction(rBound.StatusFunctionNr(), nTokenId, io_rText);
186 }
187 
188 bool
PassNewToken()189 Context_UidlCode::PassNewToken()
190 {
191     if (pNewToken)
192     {
193         pReceiver->Receive(*pNewToken.Release());
194         return true;
195     }
196     return false;
197 }
198 
199 TkpContext &
FollowUpContext()200 Context_UidlCode::FollowUpContext()
201 {
202     csv_assert(pFollowUpContext != 0);
203     return *pFollowUpContext;
204 }
205 
206 void
PerformStatusFunction(uintt i_nStatusSignal,UINT16 i_nTokenId,CharacterSource & io_rText)207 Context_UidlCode::PerformStatusFunction( uintt              i_nStatusSignal,
208                                          UINT16             i_nTokenId,
209                                          CharacterSource &  io_rText )
210 {
211     switch (i_nStatusSignal)
212     {
213         case nF_fin_Error:
214             // KORR_FUTURE
215             throw X_AutodocParser(X_AutodocParser::x_InvalidChar);
216             // no break, because of throw
217         case nF_fin_Ignore:
218             pNewToken = 0;
219             io_rText.CutToken();
220             break;
221         case nF_fin_Identifier:
222             pNewToken = new TokIdentifier(io_rText.CutToken());
223             break;
224         case nF_fin_Keyword:
225             io_rText.CutToken();
226             switch ( i_nTokenId / 50 )
227             {
228                 case 2:
229                     pNewToken = new TokBuiltInType(i_nTokenId - 100);
230                     break;
231                 case 4:
232                     pNewToken = new TokTypeModifier(i_nTokenId - 200);
233                     break;
234                 case 5:
235                     pNewToken = new TokParameterHandling(i_nTokenId - 250);
236                     break;
237                 case 6:
238                     pNewToken = new TokMetaType(i_nTokenId - 300);
239                     break;
240                 case 8:
241                     pNewToken = new TokStereotype(i_nTokenId - 400);
242                     break;
243                 case 10:
244                     switch (i_nTokenId-500)
245                     {
246                         case 1:
247                             pNewToken = new TokRaises;
248                             break;
249                         case 2:
250                             pNewToken = new TokNeeds;
251                             break;
252                         case 3:
253                             pNewToken = new TokObserves;
254                             break;
255                         default:
256                             csv_assert(false);
257                     }
258                     break;
259                 default:
260                     csv_assert(false);
261             }   // end switch ( i_nTokenId / 50 )
262             break;
263         case nF_fin_Punctuation:
264             io_rText.CutToken();
265             if (i_nTokenId == nTok_punct_DoubleColon)
266                 pNewToken = new TokNameSeparator;
267             else
268                 pNewToken = new TokPunctuation(i_nTokenId - 700);
269             break;
270         case nF_fin_EOL:
271             io_rText.CutToken();
272             pNewToken = new Tok_EOL;
273             pReceiver->Increment_CurLine();
274             break;
275         case nF_fin_EOF:
276             pNewToken = new Tok_EOF;
277             break;
278         case nF_goto_MLDocu:
279             while ( io_rText.CurChar() == '*')
280                 io_rText.MoveOn();
281             io_rText.CutToken();
282             pDocuContext->SetMode_IsMultiLine(true);
283             break;
284         case nF_goto_SLDocu:
285             io_rText.CutToken();
286             pDocuContext->SetMode_IsMultiLine(false);
287             break;
288         case nF_goto_MLComment:
289             break;
290         case nF_goto_SLComment:
291             break;
292         case nF_goto_Praeprocessor:
293             break;
294         case nF_goto_Assignment:
295             break;
296         default:
297             csv_assert(false);
298     }   // end switch (i_nStatusSignal)
299 }
300 
301 void
SetupStateMachine()302 Context_UidlCode::SetupStateMachine()
303 {
304     // Besondere Array-Stati (kein Tokenabschluss oder Kontextwechsel):
305 //  const INT16 top = 0;        // Top-Status
306     const INT16 wht = 1;        // Whitespace-�berlese-Status
307     const INT16 bez = 2;        // Bezeichner-lese-Status
308 
309     // Tokenfinish-Stati:
310     const INT16 finErr = 3;
311     const INT16 finIgn = 4;
312     const INT16 finBez = 5;
313     const INT16 finKeyw = 6;
314     const INT16 finPunct = 7;
315     const INT16 finEOL = 8;
316     const INT16 finEOF = 9;
317 
318     // Kontextwechsel-Stati:
319     const INT16 gotoMld = 10;
320     const INT16 gotoSld = 11;
321     const INT16 gotoMlc = 12;
322     const INT16 gotoSlc = 13;
323     const INT16 gotoPrp = 14;
324     const INT16 gotoAsg = 15;
325 
326     // Konstanten zur Benutzung in der Tabelle:
327     const INT16 err = finErr;
328     const INT16 fbz = finBez;
329     const INT16 fig = finIgn;
330     const INT16 fof = finEOF;
331 //  const INT16 fkw = finKeyw;
332 //  const INT16 fpc = finPunct;
333 
334     /// Die '0'en werden spaeter durch AddToken() ersetzt.
335 
336     const INT16 A_nTopStatus[C_nStatusSize] =
337     //  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15
338     {fof,err,err,err,err,err,err,err,err,wht,  0,wht,wht,  0,err,err,
339      err,err,err,err,err,err,err,err,err,err,fof,err,err,err,err,err, // 16 ...
340      wht,err,wht,  0,err,err,err,err,  0,  0,err,err,  0,  0,  0,err,
341      bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,err,err,err,err,err,err, // 48 ...
342      err,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,
343      bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,  0,err,  0,err,bez, // 80 ...
344      err,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,
345      bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,  0,err,  0,err,err, // 112 ...
346     };
347 
348     const INT16 A_nWhitespaceStatus[C_nStatusSize] =
349     //  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15
350     {fof,err,err,err,err,err,err,err,err,wht,fig,wht,wht,fig,err,err,
351      err,err,err,err,err,err,err,err,err,err,fof,err,err,err,err,err, // 16 ...
352      wht,fig,wht,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,
353      fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig, // 48 ...
354      fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,
355      fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig, // 80 ...
356      fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,
357      fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,fig,err  // 112 ...
358     };
359 
360     const INT16 A_nBezeichnerStatus[C_nStatusSize] =
361     //  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15
362     {fbz,err,err,err,err,err,err,err,err,fbz,fbz,fbz,fbz,fbz,err,err,
363      err,err,err,err,err,err,err,err,err,err,fbz,err,err,err,err,err, // 16 ...
364      fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,
365      bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,fbz,fbz,fbz,fbz,fbz,fbz, // 48 ...
366      fbz,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,
367      bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,fbz,fbz,fbz,fbz,bez, // 80 ...
368      fbz,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,
369      bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,fbz,fbz,fbz,fbz,err  // 112 ...
370     };
371 
372     const INT16 A_nPunctDefStatus[C_nStatusSize] =
373     //  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15
374     {err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,
375      err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err, // 16 ...
376      err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,
377      err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err, // 48 ...
378      err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,
379      err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err, // 80 ...
380      err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,
381      err,err,err,err,err,err,err,err,err,err,err,err,err,err,err,err  // 112 ...
382     };
383 
384     const INT16 A_nKeywordDefStatus[C_nStatusSize] =
385     //  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15
386     {fbz,err,err,err,err,err,err,err,err,fbz,fbz,fbz,fbz,fbz,err,err,
387      err,err,err,err,err,err,err,err,err,err,fbz,err,err,err,err,err, // 16 ...
388      fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,fbz,
389      bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,fbz,fbz,fbz,fbz,fbz,fbz, // 48 ...
390      fbz,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,
391      bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,fbz,fbz,fbz,fbz,bez, // 80 ...
392      fbz,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,
393      bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,bez,fbz,fbz,fbz,fbz,err  // 112 ...
394     };
395 
396     DYN StmArrayStatu2 * dpStatusTop
397             = new StmArrayStatu2( C_nStatusSize, A_nTopStatus, 0, true);
398     DYN StmArrayStatu2 * dpStatusWhite
399             = new StmArrayStatu2( C_nStatusSize, A_nWhitespaceStatus, 0, true);
400     DYN StmArrayStatu2 * dpStatusBez
401             = new StmArrayStatu2( C_nStatusSize, A_nBezeichnerStatus, 0, true);
402 
403     DYN StmBoundsStatu2 *   dpBst_finErr
404             = new StmBoundsStatu2( *this, TkpContext_Null2_(), nF_fin_Error, true );
405     DYN StmBoundsStatu2 *   dpBst_finIgn
406             = new StmBoundsStatu2( *this, *this, nF_fin_Ignore, true );
407     DYN StmBoundsStatu2 *   dpBst_finBez
408             = new StmBoundsStatu2( *this, *this, nF_fin_Identifier, true );
409     DYN StmBoundsStatu2 *   dpBst_finKeyw
410             = new StmBoundsStatu2( *this, *this, nF_fin_Keyword, false );
411     DYN StmBoundsStatu2 *   dpBst_finPunct
412             = new StmBoundsStatu2( *this, *this, nF_fin_Punctuation, false );
413     DYN StmBoundsStatu2 *   dpBst_finEOL
414             = new StmBoundsStatu2( *this, *this, nF_fin_EOL, false );
415     DYN StmBoundsStatu2 *   dpBst_finEOF
416             = new StmBoundsStatu2( *this, TkpContext_Null2_(), nF_fin_EOF, false );
417 
418     DYN StmBoundsStatu2 *   dpBst_gotoMld
419             = new StmBoundsStatu2( *this, *pDocuContext, nF_goto_MLDocu, false );
420     DYN StmBoundsStatu2 *   dpBst_gotoSld
421             = new StmBoundsStatu2( *this, *pDocuContext, nF_goto_SLDocu, false );
422     DYN StmBoundsStatu2 *   dpBst_gotoMlc
423             = new StmBoundsStatu2( *this, *dpContext_MLComment, nF_goto_MLComment, false );
424     DYN StmBoundsStatu2 *   dpBst_gotoSlc
425             = new StmBoundsStatu2( *this, *dpContext_SLComment, nF_goto_SLComment, false );
426     DYN StmBoundsStatu2 *   dpBst_gotoPrp
427             = new StmBoundsStatu2( *this, *dpContext_Preprocessor, nF_goto_Praeprocessor, false );
428     DYN StmBoundsStatu2 *   dpBst_gotoAsg
429             = new StmBoundsStatu2( *this, *dpContext_Assignment, nF_goto_Assignment, false );
430 
431     // dpMain aufbauen:
432     aStateMachine.AddStatus(dpStatusTop);
433 
434     aStateMachine.AddStatus(dpStatusWhite);
435     aStateMachine.AddStatus(dpStatusBez);
436 
437     aStateMachine.AddStatus(dpBst_finErr);
438     aStateMachine.AddStatus(dpBst_finIgn);
439     aStateMachine.AddStatus(dpBst_finBez);
440     aStateMachine.AddStatus(dpBst_finKeyw);
441     aStateMachine.AddStatus(dpBst_finPunct);
442     aStateMachine.AddStatus(dpBst_finEOL);
443     aStateMachine.AddStatus(dpBst_finEOF);
444 
445     aStateMachine.AddStatus(dpBst_gotoMld);
446     aStateMachine.AddStatus(dpBst_gotoSld);
447     aStateMachine.AddStatus(dpBst_gotoMlc);
448     aStateMachine.AddStatus(dpBst_gotoSlc);
449     aStateMachine.AddStatus(dpBst_gotoPrp);
450     aStateMachine.AddStatus(dpBst_gotoAsg);
451 
452     aStateMachine.AddToken("any",       nTok_bty_any,           A_nKeywordDefStatus,    finKeyw);
453     aStateMachine.AddToken("attribute", nTok_mt_attribute,      A_nKeywordDefStatus,    finKeyw);
454     aStateMachine.AddToken("boolean",   nTok_bty_boolean,       A_nKeywordDefStatus,    finKeyw);
455     aStateMachine.AddToken("bound",     nTok_ste_bound,         A_nKeywordDefStatus,    finKeyw);
456     aStateMachine.AddToken("byte",      nTok_bty_byte,          A_nKeywordDefStatus,    finKeyw);
457     aStateMachine.AddToken("char",      nTok_bty_char,          A_nKeywordDefStatus,    finKeyw);
458     aStateMachine.AddToken("const",     nTok_ste_const,         A_nKeywordDefStatus,    finKeyw);
459     aStateMachine.AddToken("constants", nTok_mt_constants,      A_nKeywordDefStatus,    finKeyw);
460     aStateMachine.AddToken("constrained",
461                                         nTok_ste_constrained,   A_nKeywordDefStatus,    finKeyw);
462     aStateMachine.AddToken("double",    nTok_bty_double,        A_nKeywordDefStatus,    finKeyw);
463     aStateMachine.AddToken("enum",      nTok_mt_enum,           A_nKeywordDefStatus,    finKeyw);
464     aStateMachine.AddToken("exception", nTok_mt_exception,      A_nKeywordDefStatus,    finKeyw);
465     aStateMachine.AddToken("hyper",     nTok_bty_hyper,         A_nKeywordDefStatus,    finKeyw);
466     aStateMachine.AddToken("ident",     nTok_mt_ident,          A_nKeywordDefStatus,    finKeyw);
467     aStateMachine.AddToken("in",        nTok_ph_in,             A_nKeywordDefStatus,    finKeyw);
468     aStateMachine.AddToken("inout",     nTok_ph_inout,          A_nKeywordDefStatus,    finKeyw);
469     aStateMachine.AddToken("interface", nTok_mt_interface,      A_nKeywordDefStatus,    finKeyw);
470     aStateMachine.AddToken("long",      nTok_bty_long,          A_nKeywordDefStatus,    finKeyw);
471     aStateMachine.AddToken("maybeambiguous",
472                                         nTok_ste_maybeambiguous,A_nKeywordDefStatus,    finKeyw);
473     aStateMachine.AddToken("maybedefault",
474                                         nTok_ste_maybedefault,  A_nKeywordDefStatus,    finKeyw);
475     aStateMachine.AddToken("maybevoid", nTok_ste_maybevoid,     A_nKeywordDefStatus,    finKeyw);
476     aStateMachine.AddToken("module",    nTok_mt_module,         A_nKeywordDefStatus,    finKeyw);
477     aStateMachine.AddToken("needs",     nTok_needs,             A_nKeywordDefStatus,    finKeyw);
478     aStateMachine.AddToken("observes",  nTok_observes,          A_nKeywordDefStatus,    finKeyw);
479     aStateMachine.AddToken("oneway",    nTok_ste_oneway,        A_nKeywordDefStatus,    finKeyw);
480     aStateMachine.AddToken("optional",  nTok_ste_optional,      A_nKeywordDefStatus,    finKeyw);
481     aStateMachine.AddToken("out",       nTok_ph_out,            A_nKeywordDefStatus,    finKeyw);
482     aStateMachine.AddToken("property",  nTok_mt_property,       A_nKeywordDefStatus,    finKeyw);
483     aStateMachine.AddToken("published", nTok_ste_published,     A_nKeywordDefStatus,    finKeyw);
484     aStateMachine.AddToken("raises",    nTok_raises,            A_nKeywordDefStatus,    finKeyw);
485     aStateMachine.AddToken("readonly",  nTok_ste_readonly,      A_nKeywordDefStatus,    finKeyw);
486     aStateMachine.AddToken("removable", nTok_ste_removable,     A_nKeywordDefStatus,    finKeyw);
487     aStateMachine.AddToken("sequence",  nTok_tmod_sequence,     A_nKeywordDefStatus,    finKeyw);
488     aStateMachine.AddToken("service",   nTok_mt_service,        A_nKeywordDefStatus,    finKeyw);
489     aStateMachine.AddToken("short",     nTok_bty_short,         A_nKeywordDefStatus,    finKeyw);
490     aStateMachine.AddToken("singleton", nTok_mt_singleton,      A_nKeywordDefStatus,    finKeyw);
491     aStateMachine.AddToken("string",    nTok_bty_string,        A_nKeywordDefStatus,    finKeyw);
492     aStateMachine.AddToken("struct",    nTok_mt_struct,         A_nKeywordDefStatus,    finKeyw);
493     aStateMachine.AddToken("transient", nTok_ste_transient,     A_nKeywordDefStatus,    finKeyw);
494     aStateMachine.AddToken("typedef",   nTok_mt_typedef,        A_nKeywordDefStatus,    finKeyw);
495     aStateMachine.AddToken("uik",       nTok_mt_uik,            A_nKeywordDefStatus,    finKeyw);
496     aStateMachine.AddToken("unsigned",  nTok_tmod_unsigned,     A_nKeywordDefStatus,    finKeyw);
497     aStateMachine.AddToken("virtual",   nTok_ste_virtual,       A_nKeywordDefStatus,    finKeyw);
498     aStateMachine.AddToken("void",      nTok_bty_void,          A_nKeywordDefStatus,    finKeyw);
499     aStateMachine.AddToken("...",       nTok_bty_ellipse,       A_nPunctDefStatus,      finKeyw);
500 
501     aStateMachine.AddToken("=",         nTok_assignment,        A_nPunctDefStatus,      gotoAsg);
502 
503     aStateMachine.AddToken("(",         nTok_punct_BracketOpen, A_nPunctDefStatus,      finPunct);
504     aStateMachine.AddToken(")",         nTok_punct_BracketClose,A_nPunctDefStatus,      finPunct);
505     aStateMachine.AddToken("[",         nTok_punct_ArrayBracketOpen,
506                                                                 A_nPunctDefStatus,      finIgn);
507     aStateMachine.AddToken("]",         nTok_punct_ArrayBracketClose,
508                                                                 A_nPunctDefStatus,      finIgn);
509     aStateMachine.AddToken("{",         nTok_punct_CurledBracketOpen,
510                                                                 A_nPunctDefStatus,      finPunct);
511     aStateMachine.AddToken("}",         nTok_punct_CurledBracketClose,
512                                                                 A_nPunctDefStatus,      finPunct);
513     aStateMachine.AddToken("<",         nTok_punct_Lesser,      A_nPunctDefStatus,      finPunct);
514     aStateMachine.AddToken(">",         nTok_punct_Greater,     A_nPunctDefStatus,      finPunct);
515     aStateMachine.AddToken(";",         nTok_punct_Semicolon,   A_nPunctDefStatus,      finPunct);
516     aStateMachine.AddToken(":",         nTok_punct_Colon,       A_nPunctDefStatus,      finPunct);
517     aStateMachine.AddToken("::",        nTok_punct_DoubleColon, A_nPunctDefStatus,      finPunct);
518     aStateMachine.AddToken(",",         nTok_punct_Comma,       A_nPunctDefStatus,      finPunct);
519     aStateMachine.AddToken("-",         nTok_punct_Minus,       A_nPunctDefStatus,      finPunct);
520     aStateMachine.AddToken(".",         nTok_punct_Fullstop,    A_nPunctDefStatus,      finPunct);
521     aStateMachine.AddToken("/**",       nTok_none_MLDocuBegin,  A_nPunctDefStatus,      gotoMld);
522     aStateMachine.AddToken("///",       nTok_none_SLDocuBegin,  A_nPunctDefStatus,      gotoSld);
523     aStateMachine.AddToken("/*",        nTok_none_MLCommentBegin,
524                                                                 A_nPunctDefStatus,      gotoMlc);
525     aStateMachine.AddToken("//",        nTok_none_SLCommentBegin,
526                                                                 A_nPunctDefStatus,      gotoSlc);
527     aStateMachine.AddToken("/**/",      nTok_ignore,            A_nPunctDefStatus,      finIgn);
528     aStateMachine.AddToken("#",         nTok_none_PraeprocessorBegin,
529                                                                 A_nPunctDefStatus,      gotoPrp);
530     aStateMachine.AddToken("\r\n",      nTok_EOL,               A_nPunctDefStatus,      finEOL);
531     aStateMachine.AddToken("\r",        nTok_EOL,               A_nPunctDefStatus,      finEOL);
532     aStateMachine.AddToken("\n",        nTok_EOL,               A_nPunctDefStatus,      finEOL);
533     aStateMachine.AddToken("\n\r",      nTok_EOL,               A_nPunctDefStatus,      finEOL);
534 };
535 
536 
537 }   // namespace uidl
538 }   // namespace csi
539 
540