Commit | Line | Data |
---|---|---|
970ed795 | 1 | /****************************************************************************** |
d44e3c4f | 2 | * Copyright (c) 2000-2016 Ericsson Telecom AB |
970ed795 EL |
3 | * All rights reserved. This program and the accompanying materials |
4 | * are made available under the terms of the Eclipse Public License v1.0 | |
5 | * which accompanies this distribution, and is available at | |
6 | * http://www.eclipse.org/legal/epl-v10.html | |
d44e3c4f | 7 | * |
8 | * Contributors: | |
9 | * Balasko, Jeno | |
10 | * Szabo, Janos Zoltan – initial implementation | |
11 | * | |
970ed795 EL |
12 | ******************************************************************************/ |
13 | ||
14 | %option noyywrap | |
15 | %option yylineno | |
16 | %option nounput | |
17 | %{ | |
18 | ||
19 | /* | |
20 | ||
21 | Tokenizer source code for TTCN-3 (input of flex) | |
22 | Rev: PA10 | |
23 | Date: April 15 2005 | |
24 | Author: Janos Zoltan Szabo (ejnosza) | |
25 | ||
26 | Revision history: | |
27 | ||
28 | Rev. Date Author Comments | |
29 | PA1 Nov 10 2000 tmpjsz Created from the prototype compiler. | |
30 | PA2 Dec 5 2000 tmpjsz Obsolete keywords removed. | |
31 | Updated according to BNF v1.0.10. | |
32 | PA3 Dec 11 2000 tmpjsz No changes. | |
33 | ||
34 | PA5 Sep 20 2001 tmpjsz Updated according to BNF v1.1.2. | |
35 | PA6 Apr 16-17 2002 tmpjsz Upgrade to BNF v2.2.0 (Rev. 12.5) | |
36 | PA7 Nov 26-27 2002 tmpjsz Upgrade to BNF v2.2.1 (Rev. 12.7) | |
37 | PA8 May 10-13 2004 ejnosza Upgrade to BNF v3.0.0Mockupv1 | |
38 | PA9 March 2005 ejnosza Added support for multi-dimension | |
39 | sub-references in port/timer/component | |
40 | operations. | |
41 | PA10 Apr 13-15 2005 ejnosza Upgrade to final BNF v3.0.0 | |
42 | ||
43 | */ | |
44 | ||
45 | #include "parser.tab.h" | |
46 | ||
47 | int dot_flag = 0; | |
48 | ||
49 | #define RETURN(ret_val) \ | |
50 | if (dot_flag) { \ | |
51 | backup_token = ret_val; \ | |
52 | return '.'; \ | |
53 | } else return ret_val | |
54 | ||
55 | #define RETURN_DOT(ret_val) \ | |
56 | if (dot_flag) { \ | |
57 | dot_flag = 0; \ | |
58 | return Dot##ret_val; \ | |
59 | } else return ret_val | |
60 | ||
61 | %} | |
62 | ||
63 | BIN 0|1 | |
64 | BINORMATCH {BIN}|"\?"|"\*" | |
65 | HEX [0-9A-Fa-f] | |
66 | HEXORMATCH {HEX}|"\?"|"\*" | |
67 | OCT {HEX}{HEX} | |
68 | OCTORMATCH {OCT}|"\?"|"\*" | |
69 | CHAR [^\"] | |
70 | ||
71 | NUMBER 0|([1-9][0-9]*) | |
72 | ||
73 | FLOAT ({NUMBER}\.[0-9]+)|({NUMBER}(\.[0-9]+)?E-?{NUMBER}) | |
74 | ||
75 | IDENTIFIER [A-Za-z][A-Za-z0-9_]* | |
76 | ||
77 | COMMENT \/\*[^\*]*(\*+[^\/\*][^\*]*)*\*+\/ | |
78 | CPLUSPLUSCOMMENT \/\/[^\r\n]* | |
79 | ||
80 | WHITESPACE [ \t\r\n]+ | |
81 | ||
82 | %% | |
83 | static int backup_token; | |
84 | if (dot_flag) { | |
85 | dot_flag = 0; | |
86 | return backup_token; | |
87 | } | |
88 | ||
89 | {WHITESPACE} { /* Drop whitespaces */ } | |
90 | ||
91 | {COMMENT}|{CPLUSPLUSCOMMENT} { /* Drop comments */ } | |
92 | ||
93 | /* Keywords */ | |
94 | ||
95 | action RETURN(ActionKeyword); | |
96 | activate RETURN(ActivateKeyword); | |
97 | address RETURN(AddressKeyword); | |
98 | alive RETURN_DOT(AliveKeyword); | |
99 | all RETURN(AllKeyword); | |
100 | alt RETURN(AltKeyword); | |
101 | altstep RETURN(AltstepKeyword); | |
102 | any RETURN(AnyKeyword); | |
103 | anytype RETURN(AnyTypeKeyword); | |
104 | bitstring RETURN(BitStringKeyword); | |
105 | boolean RETURN(BooleanKeyword); | |
106 | call RETURN_DOT(CallOpKeyword); | |
107 | case RETURN(CaseKeyword); | |
108 | catch RETURN_DOT(CatchOpKeyword); | |
109 | char RETURN(CharKeyword); | |
110 | charstring RETURN(CharStringKeyword); | |
111 | check RETURN_DOT(CheckOpKeyword); | |
112 | clear RETURN_DOT(ClearOpKeyword); | |
113 | complement RETURN(ComplementKeyword); | |
114 | component RETURN(ComponentKeyword); | |
115 | connect RETURN(ConnectKeyword); | |
116 | const RETURN(ConstKeyword); | |
117 | control RETURN(ControlKeyword); | |
118 | create RETURN_DOT(CreateKeyword); | |
119 | default RETURN(DefaultKeyword); | |
120 | deactivate RETURN(DeactivateKeyword); | |
121 | disconnect RETURN(DisconnectKeyword); | |
122 | display RETURN(DisplayKeyword); | |
123 | do RETURN(DoKeyword); | |
124 | done RETURN_DOT(DoneKeyword); | |
125 | else RETURN(ElseKeyword); | |
126 | encode RETURN(EncodeKeyword); | |
127 | enumerated RETURN(EnumKeyword); | |
128 | except RETURN(ExceptKeyword); | |
129 | exception RETURN(ExceptionKeyword); | |
130 | execute RETURN(ExecuteKeyword); | |
131 | extends RETURN(ExtendsKeyword); | |
132 | extension RETURN(ExtensionKeyword); | |
133 | external RETURN(ExtKeyword); | |
134 | float RETURN(FloatKeyword); | |
135 | for RETURN(ForKeyword); | |
136 | from RETURN(FromKeyword); | |
137 | function RETURN(FunctionKeyword); | |
138 | getcall RETURN_DOT(GetCallOpKeyword); | |
139 | getreply RETURN_DOT(GetReplyOpKeyword); | |
140 | getverdict RETURN(GetVerdictKeyword); | |
141 | goto RETURN(GotoKeyword); | |
142 | group RETURN(GroupKeyword); | |
143 | hexstring RETURN(HexStringKeyword); | |
144 | if RETURN(IfKeyword); | |
145 | ifpresent RETURN(IfPresentKeyword); | |
146 | import RETURN(ImportKeyword); | |
147 | in RETURN(InParKeyword); | |
148 | infinity RETURN(InfinityKeyword); | |
149 | inout RETURN(InOutParKeyword); | |
150 | integer RETURN(IntegerKeyword); | |
151 | interleave RETURN(InterleavedKeyword); | |
152 | kill RETURN_DOT(KillKeyword); | |
153 | killed RETURN_DOT(KilledKeyword); | |
154 | label RETURN(LabelKeyword); | |
155 | language RETURN(LanguageKeyword); | |
156 | length RETURN(LengthKeyword); | |
157 | log RETURN(LogKeyword); | |
158 | map RETURN(MapKeyword); | |
159 | match RETURN(MatchKeyword); | |
160 | message RETURN(MessageKeyword); | |
161 | mixed RETURN(MixedKeyword); | |
162 | modifies RETURN(ModifiesKeyword); | |
163 | module RETURN(TTCN3ModuleKeyword); | |
164 | modulepar RETURN(ModuleParKeyword); | |
165 | mtc RETURN(MTCKeyword); | |
166 | noblock RETURN(NoBlockKeyword); | |
167 | nowait RETURN(NowaitKeyword); | |
168 | objid RETURN(ObjectIdentifierKeyword); | |
169 | octetstring RETURN(OctetStringKeyword); | |
170 | of RETURN(OfKeyword); | |
171 | omit RETURN(OmitKeyword); | |
172 | on RETURN(OnKeyword); | |
173 | optional RETURN(OptionalKeyword); | |
174 | out RETURN(OutParKeyword); | |
175 | override RETURN(OverrideKeyword); | |
176 | param RETURN(ParamKeyword); | |
177 | pattern RETURN(PatternKeyword); | |
178 | permutation RETURN(PermutationKeyword); | |
179 | port RETURN(PortKeyword); | |
180 | procedure RETURN(ProcedureKeyword); | |
181 | raise RETURN_DOT(RaiseKeyword); | |
182 | read RETURN_DOT(ReadKeyword); | |
183 | receive RETURN_DOT(ReceiveOpKeyword); | |
184 | record RETURN(RecordKeyword); | |
185 | recursive RETURN(RecursiveKeyword); | |
186 | reply RETURN_DOT(ReplyKeyword); | |
187 | repeat RETURN(RepeatKeyword); | |
188 | return RETURN(ReturnKeyword); | |
189 | running RETURN_DOT(RunningKeyword); | |
190 | runs RETURN(RunsKeyword); | |
191 | select RETURN(SelectKeyword); | |
192 | self RETURN(SelfOp); | |
193 | send RETURN_DOT(SendOpKeyword); | |
194 | sender RETURN(SenderKeyword); | |
195 | set RETURN(SetKeyword); | |
196 | setverdict RETURN(SetVerdictKeyword); | |
197 | signature RETURN(SignatureKeyword); | |
198 | start RETURN_DOT(StartKeyword); | |
199 | stop RETURN_DOT(StopKeyword); | |
200 | subset RETURN(SubsetKeyword); | |
201 | superset RETURN(SupersetKeyword); | |
202 | system RETURN(SystemKeyword); | |
203 | template RETURN(TemplateKeyword); | |
204 | testcase RETURN(TestcaseKeyword); | |
205 | timeout RETURN_DOT(TimeoutKeyword); | |
206 | timer RETURN(TimerKeyword); | |
207 | to RETURN(ToKeyword); | |
208 | trigger RETURN_DOT(TriggerOpKeyword); | |
209 | type RETURN(TypeDefKeyword); | |
210 | union RETURN(UnionKeyword); | |
211 | universal RETURN(UniversalKeyword); | |
212 | unmap RETURN(UnmapKeyword); | |
213 | value RETURN(ValueKeyword); | |
214 | valueof RETURN(ValueofKeyword); | |
215 | var RETURN(VarKeyword); | |
216 | variant RETURN(VariantKeyword); | |
217 | verdicttype RETURN(VerdictTypeKeyword); | |
218 | while RETURN(WhileKeyword); | |
219 | with RETURN(WithKeyword); | |
220 | ||
221 | /* Values */ | |
222 | ||
223 | {NUMBER} RETURN(Number); | |
224 | ||
225 | {FLOAT} RETURN(FloatValue); | |
226 | ||
227 | true|false RETURN(BooleanConst); | |
228 | ||
229 | pass|fail|inconc|none|error RETURN(VerdictConst); | |
230 | ||
231 | \'{BIN}*\'B RETURN(Bstring); | |
232 | ||
233 | \'{BINORMATCH}*\'B RETURN(BitStringMatch); | |
234 | ||
235 | \'{HEX}*\'H RETURN(Hstring); | |
236 | ||
237 | \'{HEXORMATCH}*\'H RETURN(HexStringMatch); | |
238 | ||
239 | \'{OCT}*\'O RETURN(Ostring); | |
240 | ||
241 | \'{OCTORMATCH}*\'O RETURN(OctetStringMatch); | |
242 | ||
243 | (\"{CHAR}*\"|"<\">")+ RETURN(Cstring); | |
244 | ||
245 | null RETURN(NullKeyword); | |
246 | ||
247 | /* Multi-character operators */ | |
248 | ||
249 | ":=" RETURN(AssignmentChar); | |
250 | ".." RETURN(DotDot); | |
251 | "->" RETURN(PortRedirectSymbol); | |
252 | "==" RETURN(EQ); | |
253 | "!=" RETURN(NE); | |
254 | ">=" RETURN(GE); | |
255 | "<=" RETURN(LE); | |
256 | ||
257 | "<<" RETURN(SL); | |
258 | ">>" RETURN(SR); | |
259 | "<@" RETURN(RL); | |
260 | "@>" RETURN(RR); | |
261 | ||
262 | mod RETURN(Mod); | |
263 | rem RETURN(Rem); | |
264 | or RETURN(Or); | |
265 | or4b RETURN(Or4b); | |
266 | xor RETURN(Xor); | |
267 | xor4b RETURN(Xor4b); | |
268 | and RETURN(And); | |
269 | and4b RETURN(And4b); | |
270 | not RETURN(Not); | |
271 | not4b RETURN(Not4b); | |
272 | ||
273 | /* Identifiers */ | |
274 | ||
275 | {IDENTIFIER} RETURN(Identifier); | |
276 | ||
277 | /* Single character literals */ | |
278 | ||
279 | \. if (dot_flag) { | |
280 | backup_token = '.'; | |
281 | return '.'; | |
282 | } else dot_flag = 1; | |
283 | ||
284 | . return yytext[0]; | |
285 | ||
286 | <<EOF>> if (dot_flag) { | |
287 | dot_flag = 0; | |
288 | return '.'; | |
289 | } else return EOF; | |
290 | ||
291 | %% | |
292 |