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