]> andersk Git - splint.git/blame - src/cscanner.l
Making fixes for Microsoft Visual C++ compiler.
[splint.git] / src / cscanner.l
CommitLineData
ac0860d8 1/*;-*-C-*-;
11db3170 2** Splint - annotation-assisted static program checker
c59f5181 3** Copyright (C) 1994-2003 University of Virginia,
11db3170 4** Massachusetts Institute of Technology
ac0860d8 5**
11db3170 6** This program is free software; you can redistribute it and/or modify it
7** under the terms of the GNU General Public License as published by the
8** Free Software Foundation; either version 2 of the License, or (at your
9** option) any later version.
10**
11** This program is distributed in the hope that it will be useful, but
12** WITHOUT ANY WARRANTY; without even the implied warranty of
13** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14** General Public License for more details.
15**
16** The GNU General Public License is available from http://www.gnu.org/ or
17** the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
18** MA 02111-1307, USA.
ac0860d8 19**
1b8ae690 20** For information on splint: splint@cs.virginia.edu
21** To report a bug: splint-bug@cs.virginia.edu
11db3170 22** For more information: http://www.splint.org
23*/
24/*
25** cscanner.l
ac0860d8 26**
11db3170 27** Flex lexer for C.
28** Based on a C lexer by Nate Osgood
29** from hacrat@catfish.lcs.mit.edu Mon Jun 14 13:06:32 1993
ac0860d8 30*/
31/*
11db3170 32** Modified by Herbert 08/19/97:
33** - added #include for IBM's OS/2 compiler.
34** - fixed weird bug with lookup of tmp files (OS/2 and MSDOS only).
35*/
ac0860d8 36/*
11db3170 37** Modified by Mike Smith
38** Corrected missing 'line' in scanf() calls in handleSpecial().
1b8ae690 39** Without this, I get an error when Splint hits a '#line' directive
11db3170 40** in the pre-pre-processed source files. For safety, I have made these
41** conditional on OS2 and MSDOS because I don't understand why noone else
42** has seen this problem.
43**
44** Modified by Mike Smith, 4th June 1997
45** Finally resolved the #line problem. The scanf() calls have been fixed to
46** allow the following #line forms:-
47**
48** #line 123 "filename"
49** #line 123
50** # 123 "filename"
51** # 123
52**
53** The last two are generated by the GNU pre-processor, apparently
54*/
ac0860d8 55
56Digit [0-9]
57Letter [a-zA-Z_$]
58H [a-fA-F0-9]
59E [Ee][+-]?{Digit}+
60U (u|U)
61L (l|L)
62FS (f|F|l|L)
63IS (u|U|l|L)*
64ULSuffix ({U}{L}|{L}{U})
65
66%{
1b8ae690 67# include "splintMacros.nf"
9622303f 68# if defined(OS2) && defined(__IBMC__)
69 /* needed for isatty()... */
70# include <io.h>
71# else
4dd72714 72
73/*
74** Win32 doesn't have unistd.h
75*/
76
77# ifndef WIN32
ac0860d8 78# include <unistd.h>
9622303f 79# endif
80
4dd72714 81# endif
82
ac0860d8 83# include "basic.h"
84
16c024b5 85# include "cscannerHelp.h"
ac0860d8 86# include "cgrammar.h"
87# include "cgrammar_tokens.h"
4caf866b 88# include "osd.h"
ac0860d8 89
ac0860d8 90/*@notfunction@*/
91# define yyinput() (incColumn (), getc (yyin))
92
ac0860d8 93# include "flex.head"
94
ac0860d8 95%}
96
97%%
98
b87215ab 99"/*" { llfatalerror (cstring_makeLiteral ("Comment in pre-processor output")); }
ac0860d8 100
16c024b5 101"#"{Letter}({Letter}|{Digit})* {
ac0860d8 102 context_saveLocation ();
16c024b5 103 cscannerHelp_setTokLength (longUnsigned_toInt (mstring_length (yytext)));
ac0860d8 104
16c024b5 105 if (cscannerHelp_processHashIdentifier
106 (cscannerHelp_makeIdentifier (yytext + 1)))
ac0860d8 107 {
16c024b5 108 return cscannerHelp_returnString (cstring_makeLiteral ("\"\""));
ac0860d8 109 }
110 else
111 {
16c024b5 112 if (cscannerHelp_handleSpecial (yytext))
ac0860d8 113 {
16c024b5 114 cscannerHelp_setTokLength (1);
115 return cscannerHelp_returnToken (0);
ac0860d8 116 }
117 }
118 }
16c024b5 119"#" { if (cscannerHelp_handleSpecial (yytext))
ac0860d8 120 {
16c024b5 121 cscannerHelp_setTokLength (1); return cscannerHelp_returnToken (0);
ac0860d8 122 }
123 }
16c024b5 124"..." { cscannerHelp_setTokLength (3); return cscannerHelp_returnToken (CTOK_ELIPSIS); }
125"break" { cscannerHelp_setTokLength (5); return cscannerHelp_returnToken (BREAK); }
126"case" { cscannerHelp_setTokLength (4); return cscannerHelp_returnToken (CASE); }
127"continue" { cscannerHelp_setTokLength (8); return cscannerHelp_returnToken (CONTINUE); }
128"default" { cscannerHelp_setTokLength (7); return cscannerHelp_returnToken (DEFAULT); }
129"do" { cscannerHelp_setTokLength (2); return cscannerHelp_returnToken (DO); }
130"else" { cscannerHelp_setTokLength (4); return cscannerHelp_returnToken (CELSE); }
131"for" { cscannerHelp_setTokLength (3); return cscannerHelp_returnToken (CFOR); }
132"goto" { cscannerHelp_setTokLength (4); return cscannerHelp_returnToken (GOTO); }
133"if" { cscannerHelp_setTokLength (2); return cscannerHelp_returnToken (CIF); }
134"return" { cscannerHelp_setTokLength (6); return cscannerHelp_returnToken (RETURN); }
135"sizeof" { cscannerHelp_setTokLength (6); return cscannerHelp_returnToken (CSIZEOF); }
136"offsetof" { cscannerHelp_setTokLength (8); return cscannerHelp_returnToken (COFFSETOF); }
137"switch" { cscannerHelp_setTokLength (6); return cscannerHelp_returnToken (SWITCH); }
138"while" { cscannerHelp_setTokLength (5); return cscannerHelp_returnToken (WHILE); }
139"va_arg" { cscannerHelp_setTokLength (6); return cscannerHelp_returnToken (VA_ARG); }
140"va_dcl" { cscannerHelp_setTokLength (6); return cscannerHelp_returnToken (VA_DCL); }
ac0860d8 141"inline" {
142 /* gcc extension...this might not be appropriate */
16c024b5 143 cscannerHelp_setTokLength (6); return cscannerHelp_returnToken (QINLINE); }
ac0860d8 144
16c024b5 145"struct" { cscannerHelp_setTokLength (6); return cscannerHelp_returnToken (CSTRUCT); }
146"typedef" { cscannerHelp_setTokLength (7); return cscannerHelp_returnToken (CTYPEDEF); }
ac0860d8 147
16c024b5 148"union" { cscannerHelp_setTokLength (5); return cscannerHelp_returnToken (CUNION); }
149"enum" { cscannerHelp_setTokLength (4); return cscannerHelp_returnToken (CENUM); }
ac0860d8 150
16c024b5 151"void" { cscannerHelp_setTokLength (4); return cscannerHelp_returnType (CVOID, ctype_void); }
152"int" { cscannerHelp_setTokLength (3); return cscannerHelp_returnType (CINT, ctype_int); }
153"double" { cscannerHelp_setTokLength (6); return cscannerHelp_returnType (CDOUBLE, ctype_double); }
154"char" { cscannerHelp_setTokLength (4); return cscannerHelp_returnType (CGCHAR, ctype_char); }
155"float" { cscannerHelp_setTokLength (5); return cscannerHelp_returnType (CGFLOAT, ctype_float); }
ac0860d8 156
16c024b5 157"long" { cscannerHelp_setTokLength (4); return cscannerHelp_returnToken (QLONG); }
158"short" { cscannerHelp_setTokLength (5); return cscannerHelp_returnToken (QSHORT); }
159"unsigned" { cscannerHelp_setTokLength (8); return cscannerHelp_returnToken (QUNSIGNED); }
160"signed" { cscannerHelp_setTokLength (6); return cscannerHelp_returnToken (QSIGNED); }
ac0860d8 161
16c024b5 162"volatile" { cscannerHelp_setTokLength (8); return cscannerHelp_returnToken (QVOLATILE); }
163"const" { cscannerHelp_setTokLength (5); return cscannerHelp_returnToken (QCONST); }
164"restrict" { cscannerHelp_setTokLength (8); return cscannerHelp_returnToken (QRESTRICT); }
ac0860d8 165
166 /* some systems expect this! [gack!] */
16c024b5 167"__const" { cscannerHelp_setTokLength (7); return cscannerHelp_returnToken (QCONST); }
168
169"extern" { cscannerHelp_setTokLength (6); return cscannerHelp_returnToken (QEXTERN); }
170"auto" { cscannerHelp_setTokLength (4); return cscannerHelp_returnToken (QAUTO); }
171"register" { cscannerHelp_setTokLength (8); return cscannerHelp_returnToken (QREGISTER); }
172"static" { cscannerHelp_setTokLength (6); return cscannerHelp_returnToken (QSTATIC); }
173
174\"(\\.|[^\\"])*\"([ \t\n]*\"(\\.|[^\\"])*\")* { return cscannerHelp_returnExpr (cscannerHelp_processString ()); }
175L\"(\\.|[^\\"])*\"([ \t\n]*\"(\\.|[^\\"])*\")* { return cscannerHelp_returnExpr (cscannerHelp_processWideString ()); }
176"out" { return (cscannerHelp_processSpec (QOUT)); }
177"in" { return (cscannerHelp_processSpec (QIN)); }
178"partial" { return (cscannerHelp_processSpec (QPARTIAL)); }
179"special" { return (cscannerHelp_processSpec (QSPECIAL)); }
180"anytype" { return (cscannerHelp_processSpec (QANYTYPE)); }
181"integraltype" { return (cscannerHelp_processSpec (QINTEGRALTYPE)); }
182"unsignedintegraltype" { return (cscannerHelp_processSpec (QUNSIGNEDINTEGRALTYPE)); }
183"signedintegraltype" { return (cscannerHelp_processSpec (QSIGNEDINTEGRALTYPE)); }
184"keep" { return (cscannerHelp_processSpec (QKEEP)); }
185"null" { return (cscannerHelp_processSpec (QNULL)); }
186"notnull" { return (cscannerHelp_processSpec (QNOTNULL)); }
187"isnull" { return (cscannerHelp_processSpec (QISNULL)); }
188"truenull" { return (cscannerHelp_processSpec (QTRUENULL)); }
189"falsenull" { return (cscannerHelp_processSpec (QFALSENULL)); }
190"nullwhentrue" { return (cscannerHelp_processSpec (QTRUENULL)); }
191"nullwhenfalse" { return (cscannerHelp_processSpec (QFALSENULL)); }
192"relnull" { return (cscannerHelp_processSpec (QRELNULL)); }
193"reldef" { return (cscannerHelp_processSpec (QRELDEF)); }
194"exposed" { return (cscannerHelp_processSpec (QEXPOSED)); }
195"newref" { return (cscannerHelp_processSpec (QNEWREF)); }
196"tempref" { return (cscannerHelp_processSpec (QTEMPREF)); }
197"killref" { return (cscannerHelp_processSpec (QKILLREF)); }
198"refcounted" { return (cscannerHelp_processSpec (QREFCOUNTED)); }
199"checked" { return (cscannerHelp_processSpec (QCHECKED)); }
200"checkmod" { return (cscannerHelp_processSpec (QCHECKMOD)); }
201"checkedstrict" { return (cscannerHelp_processSpec (QCHECKEDSTRICT)); }
202"unchecked" { return (cscannerHelp_processSpec (QUNCHECKED)); }
203"only" { return (cscannerHelp_processSpec (QONLY)); }
204"owned" { return (cscannerHelp_processSpec (QOWNED)); }
205"observer" { return (cscannerHelp_processSpec (QOBSERVER)); }
206"dependent" { return (cscannerHelp_processSpec (QDEPENDENT)); }
207"unused" { return (cscannerHelp_processSpec (QUNUSED)); }
208"external" { return (cscannerHelp_processSpec (QEXTERNAL)); }
209"sef" { return (cscannerHelp_processSpec (QSEF)); }
210"shared" { return (cscannerHelp_processSpec (QSHARED)); }
211"yield" { return (cscannerHelp_processSpec (QYIELD)); }
212"undef" { return (cscannerHelp_processSpec (QUNDEF)); }
213"killed" { return (cscannerHelp_processSpec (QKILLED)); }
214"nullterminated" { return (cscannerHelp_processSpec (QNULLTERMINATED));}
215"MaxSet" { return (cscannerHelp_processSpec (QMAXSET));}
216"MaxRead" { return (cscannerHelp_processSpec (QMAXREAD));}
217"maxSet" { return (cscannerHelp_processSpec (QMAXSET));}
218"maxRead" { return (cscannerHelp_processSpec (QMAXREAD));}
219
220{Letter}({Letter}|{Digit})* { int tok = cscannerHelp_processTextIdentifier (yytext);
221 if (tok != BADTOK)
ac0860d8 222 {
223 return (tok);
224 }
225 }
16c024b5 2260[xX]{H}+ { cscannerHelp_setTokLengthT (mstring_length (yytext));
227 return cscannerHelp_returnInt (ctype_int, cscannerHelp_processHex ()); /* evs 2000-05-17 was ctype_uint */
ac0860d8 228 }
16c024b5 2290[xX]{H}+{L} { cscannerHelp_setTokLengthT (mstring_length (yytext));
230 return cscannerHelp_returnInt (ctype_lint, cscannerHelp_processHex ()); }
2310[xX]{H}+{L}{L} { cscannerHelp_setTokLengthT (mstring_length (yytext));
232 return cscannerHelp_returnInt (ctype_llint, cscannerHelp_processHex ()); }
2330[xX]{H}+{U} { cscannerHelp_setTokLengthT (mstring_length (yytext));
234 return cscannerHelp_returnInt (ctype_uint, cscannerHelp_processHex ()); }
2350[xX]{H}+{ULSuffix} { cscannerHelp_setTokLengthT (mstring_length (yytext));
236 return cscannerHelp_returnInt (ctype_ulint, cscannerHelp_processHex ()); }
2370[xX]{H}+{U}{L}{L} { cscannerHelp_setTokLengthT (mstring_length (yytext));
238 return cscannerHelp_returnInt (ctype_ullint, cscannerHelp_processHex ()); }
2390[xX]{H}+{L}{L}{U} { cscannerHelp_setTokLengthT (mstring_length (yytext));
240 return cscannerHelp_returnInt (ctype_ullint, cscannerHelp_processHex ()); }
2410{Digit}+ { cscannerHelp_setTokLengthT (mstring_length (yytext));
242 return cscannerHelp_returnInt (ctype_int, cscannerHelp_processOctal ()); }
2430{Digit}+{U} { cscannerHelp_setTokLengthT (mstring_length (yytext));
244 return cscannerHelp_returnInt (ctype_uint, cscannerHelp_processOctal ()); }
2450{Digit}+{L} { cscannerHelp_setTokLengthT (mstring_length (yytext));
246 return cscannerHelp_returnInt (ctype_lint, cscannerHelp_processOctal ()); }
2470{Digit}+{L}{L} { cscannerHelp_setTokLengthT (mstring_length (yytext));
248 return cscannerHelp_returnInt (ctype_llint, cscannerHelp_processOctal ()); }
2490{Digit}+{ULSuffix} { cscannerHelp_setTokLengthT (mstring_length (yytext));
250 return cscannerHelp_returnInt (ctype_ulint, cscannerHelp_processOctal ()); }
2510{Digit}+{U}{L}{L} { cscannerHelp_setTokLengthT (mstring_length (yytext));
252 return cscannerHelp_returnInt (ctype_ullint, cscannerHelp_processOctal ()); }
2530{Digit}+{L}{L}{U} { cscannerHelp_setTokLengthT (mstring_length (yytext));
254 return cscannerHelp_returnInt (ctype_ullint, cscannerHelp_processOctal ()); }
255{Digit}+ { cscannerHelp_setTokLengthT (mstring_length (yytext));
256 return cscannerHelp_returnInt (ctype_int, cscannerHelp_processDec ()); }
257{Digit}+{U} { cscannerHelp_setTokLengthT (mstring_length (yytext));
258 return cscannerHelp_returnInt (ctype_uint, cscannerHelp_processDec ()); }
259{Digit}+{L} { cscannerHelp_setTokLengthT (mstring_length (yytext));
260 return cscannerHelp_returnInt (ctype_lint, cscannerHelp_processDec ()); }
261{Digit}+{L}{L} { cscannerHelp_setTokLengthT (mstring_length (yytext));
262 return cscannerHelp_returnInt (ctype_llint, cscannerHelp_processDec ()); }
263{Digit}+{ULSuffix} { cscannerHelp_setTokLengthT (mstring_length (yytext));
264 return cscannerHelp_returnInt (ctype_ulint, cscannerHelp_processDec ()); }
265{Digit}+{U}{L}{L} { cscannerHelp_setTokLengthT (mstring_length (yytext));
266 return cscannerHelp_returnInt (ctype_ullint, cscannerHelp_processDec ()); }
267{Digit}+{L}{L}{U} { cscannerHelp_setTokLengthT (mstring_length (yytext));
268 return cscannerHelp_returnInt (ctype_ullint, cscannerHelp_processDec ()); }
269'(\\.|[^\\'])+' { cscannerHelp_setTokLengthT (mstring_length (yytext));
270 return cscannerHelp_returnChar (cscannerHelp_processChar ()); }
271L'(\\.|[^\\'])+' { cscannerHelp_setTokLengthT (mstring_length (yytext));
272 return cscannerHelp_returnChar (cscannerHelp_processChar ()); }
273{Digit}+{E}[fF] { cscannerHelp_setTokLengthT (mstring_length (yytext));
274 return cscannerHelp_returnFloat (ctype_float, cscannerHelp_processFloat ()); }
275{Digit}+{E}[lL] { cscannerHelp_setTokLengthT (mstring_length (yytext));
276 return cscannerHelp_returnFloat (ctype_ldouble, cscannerHelp_processFloat ()); }
277{Digit}+{E} { cscannerHelp_setTokLengthT (mstring_length (yytext));
278 return cscannerHelp_returnFloat (ctype_double, cscannerHelp_processFloat ()); }
279
280{Digit}*"."{Digit}+({E})?[fF] { cscannerHelp_setTokLengthT (mstring_length (yytext));
281 return cscannerHelp_returnFloat (ctype_float, cscannerHelp_processFloat ()); }
282{Digit}*"."{Digit}+({E})?[lL] { cscannerHelp_setTokLengthT (mstring_length (yytext));
283 return cscannerHelp_returnFloat (ctype_ldouble, cscannerHelp_processFloat ()); }
284{Digit}*"."{Digit}+({E})? { cscannerHelp_setTokLengthT (mstring_length (yytext));
285 return cscannerHelp_returnFloat (ctype_double, cscannerHelp_processFloat ()); }
286
287{Digit}+"."{Digit}*({E})?[fF] { cscannerHelp_setTokLengthT (mstring_length (yytext));
288 return cscannerHelp_returnFloat (ctype_float, cscannerHelp_processFloat ()); }
289{Digit}+"."{Digit}*({E})?[lL] { cscannerHelp_setTokLengthT (mstring_length (yytext));
290 return cscannerHelp_returnFloat (ctype_ldouble, cscannerHelp_processFloat ()); }
291{Digit}+"."{Digit}*({E})? { cscannerHelp_setTokLengthT (mstring_length (yytext));
292 return cscannerHelp_returnFloat (ctype_double, cscannerHelp_processFloat ()); }
293
294">>=" { return cscannerHelp_returnTokenLength (RIGHT_ASSIGN, 3); }
295"<<=" { return cscannerHelp_returnTokenLength (LEFT_ASSIGN, 3); }
296"+=" { return cscannerHelp_returnTokenLength (ADD_ASSIGN, 2); }
297"-=" { return cscannerHelp_returnTokenLength (SUB_ASSIGN, 2); }
298"*=" { return cscannerHelp_returnTokenLength (MUL_ASSIGN, 2); }
299"/=" { return cscannerHelp_returnTokenLength (DIV_ASSIGN, 2); }
300"%=" { return cscannerHelp_returnTokenLength (MOD_ASSIGN, 2); }
301"&=" { return cscannerHelp_returnTokenLength (AND_ASSIGN, 2); }
302"^=" { return cscannerHelp_returnTokenLength (XOR_ASSIGN, 2); }
303"|=" { return cscannerHelp_returnTokenLength (OR_ASSIGN, 2); }
304">>" { return cscannerHelp_returnTokenLength (RIGHT_OP, 2); }
305"<<" { return cscannerHelp_returnTokenLength (LEFT_OP, 2); }
306"++" { return cscannerHelp_returnTokenLength (INC_OP, 2); }
307"--" { return cscannerHelp_returnTokenLength (DEC_OP, 2); }
308"->" { return cscannerHelp_returnTokenLength (ARROW_OP, 2); }
309"&&" { return cscannerHelp_returnTokenLength (AND_OP, 2); }
310"||" { return cscannerHelp_returnTokenLength (OR_OP, 2); }
311"/\\" { return cscannerHelp_returnTokenLength (TCAND, 2); }
312"<=" { return cscannerHelp_returnTokenLength (LE_OP, 2); }
313">=" { return cscannerHelp_returnTokenLength (GE_OP, 2); }
314"==" { return cscannerHelp_returnTokenLength (EQ_OP, 2); }
315"!=" { return cscannerHelp_returnTokenLength (NE_OP, 2); }
316";" { return cscannerHelp_returnTokenLength (TSEMI, 1); }
317"{" { return cscannerHelp_returnTokenLength (TLBRACE, 1); }
318"}" { return cscannerHelp_returnTokenLength (TRBRACE, 1); }
319"," { return cscannerHelp_returnTokenLength (TCOMMA, 1); }
320":" { return cscannerHelp_returnTokenLength (TCOLON, 1); }
321"=" { return cscannerHelp_returnTokenLength (TASSIGN, 1); }
322"(" { return cscannerHelp_returnTokenLength (TLPAREN, 1); }
323")" { return cscannerHelp_returnTokenLength (TRPAREN, 1); }
324"[" { return cscannerHelp_returnTokenLength (TLSQBR, 1); }
325"]" { return cscannerHelp_returnTokenLength (TRSQBR, 1); }
326"." { return cscannerHelp_returnTokenLength (TDOT, 1); }
327"&" { return cscannerHelp_returnTokenLength (TAMPERSAND, 1); }
328"!" { return cscannerHelp_returnTokenLength (TEXCL, 1); }
329"~" { return cscannerHelp_returnTokenLength (TTILDE, 1); }
330"-" { return cscannerHelp_returnTokenLength (TMINUS, 1); }
331"+" { return cscannerHelp_returnTokenLength (TPLUS, 1); }
332"*" { return cscannerHelp_returnTokenLength (TMULT, 1); }
333"/" { return cscannerHelp_returnTokenLength (TDIV, 1); }
334"%" { return cscannerHelp_returnTokenLength (TPERCENT, 1); }
335"<" { return cscannerHelp_returnTokenLength (TLT, 1); }
336">" { return cscannerHelp_returnTokenLength (TGT, 1); }
337"^" { return cscannerHelp_returnTokenLength (TCIRC, 1); }
338"|" { return cscannerHelp_returnTokenLength (TBAR, 1); }
339"?" { return cscannerHelp_returnTokenLength (TQUEST, 1); }
ac0860d8 340
341[ \t\v\f] { incColumn (); }
16c024b5 342\n { int tok = cscannerHelp_handleNewLine ();
343 if (tok != BADTOK) return tok; }
344"@@MR@@" { cscannerHelp_setTokLength (6);
ac0860d8 345
16c024b5 346 if (cscannerHelp_processMacro ()) {
ac0860d8 347 if (context_inIterDef ())
348 {
16c024b5 349 return cscannerHelp_returnToken (LLMACROITER);
ac0860d8 350 }
351 if (context_inIterEnd ())
352 {
16c024b5 353 return cscannerHelp_returnToken (LLMACROEND);
ac0860d8 354 }
355 if (context_inMacro ())
356 {
16c024b5 357 return cscannerHelp_returnToken (LLMACRO);
ac0860d8 358 }
359 }
360 }
361"@QLMR" { if (context_inHeader () || context_inFunction ())
362 {
16c024b5 363 cscannerHelp_handleMacro ();
ac0860d8 364 }
365 else
366 {
16c024b5 367 int nspchar = cscannerHelp_ninput ();
ac0860d8 368 int nspaces;
369
370 /*
371 ** This is a hack to get the column number correct.
372 */
373
374 llassert (nspchar >= '0' && nspchar <= '9');
375
376 nspaces = nspchar - '0';
377
16c024b5 378 cscannerHelp_setTokLength (5 + nspaces);
ac0860d8 379
16c024b5 380 if (cscannerHelp_processMacro ())
ac0860d8 381 {
a469ccf0 382 DPRINTF (("Here we are: %s", context_unparse ()));
383
ac0860d8 384 if (context_inIterDef ())
385 {
16c024b5 386 return cscannerHelp_returnToken (LLMACROITER);
ac0860d8 387 }
388 if (context_inIterEnd ())
389 {
16c024b5 390 return cscannerHelp_returnToken (LLMACROEND);
ac0860d8 391 }
392 if (context_inMacro ())
393 {
16c024b5 394 return cscannerHelp_returnToken (LLMACRO);
ac0860d8 395 }
396 }
397 }
398 }
16c024b5 399"@.CT" { cscannerHelp_setTokLength (4); lldiagmsg (ctype_unparseTable ()); }
400"@.FA" { cscannerHelp_setTokLength (4); lldiagmsg (message ("Access types: %q", typeIdSet_unparse (context_fileAccessTypes ()))); }
401"@.F" { cscannerHelp_setTokLength (3);
ac0860d8 402 lldiagmsg (message ("%q: *** marker ***", fileloc_unparse (g_currentloc)));
403 }
16c024b5 404"@.L" { cscannerHelp_setTokLength (3); usymtab_printLocal (); }
405"@.A" { cscannerHelp_setTokLength (3); lldiagmsg (usymtab_unparseAliases ()); }
406"@.C" { cscannerHelp_setTokLength (3); lldiagmsg (context_unparse ()); }
407"@.W" { cscannerHelp_setTokLength (3); lldiagmsg (context_unparseClauses ()); }
408"@.G" { cscannerHelp_setTokLength (3); usymtab_printGuards (); }
409"@.S" { cscannerHelp_setTokLength (3); usymtab_printOut (); }
410"@.X" { cscannerHelp_setTokLength (3); usymtab_printAll (); }
411"@.Z" { cscannerHelp_setTokLength (3); usymtab_printComplete (); }
412"@.T" { cscannerHelp_setTokLength (3); usymtab_printTypes (); }
413"@.K" { cscannerHelp_setTokLength (3); lldiagmsg (usymtab_unparseStack ()); }
414"@.M" { cscannerHelp_setTokLength (3);
ac0860d8 415 lldiagmsg (message ("Can modify: %q",
416 sRefSet_unparse (context_modList ())));
417 }
418"%{" { /* BEFORE_COMMENT_MARKER */
419 int tok;
420 incColumn (); incColumn ();
16c024b5 421 tok = cscannerHelp_handleLlSpecial ();
ac0860d8 422
423 if (tok != BADTOK)
424 {
425 if (tok == CANNOTATION) {
426 return (tok);
427 } else {
428 /* Beware - this bashes yylval! */
16c024b5 429 return cscannerHelp_returnToken (tok);
ac0860d8 430 }
431 }
432 }
433"%}" { /* AFTER_COMMENT_MARKER */
16c024b5 434 cscannerHelp_setTokLength (2);
435 cscannerHelp_exitSpecPart ();
436 return cscannerHelp_returnToken (QENDMACRO); }
437"\\" { incColumn (); cscannerHelp_setContinueLine (); }
ac0860d8 438. { incColumn ();
439 if ((int) *yytext == 13 ) {
440 ;
441 } else {
442 voptgenerror
443 (FLG_SYNTAX,
444 message ("Invalid character (ascii: %d), skipping character",
445 (int)(*yytext)),
446 g_currentloc);
447 }
448 }
449%%
450
6fcd0b1e 451/*
16c024b5 452** These need to go here, after flex-generated code defined input and unput.
ac0860d8 453*/
454
16c024b5 455int cscanner_input (void)
ac0860d8 456{
16c024b5 457 return input (); /* input is a static procedure defined by flex-generated code */
ac0860d8 458}
459
16c024b5 460void cscanner_unput (int c)
ac0860d8 461{
16c024b5 462 unput (c); /* unput is a static procedure defined by flex-generated code */
ac0860d8 463}
464
ac0860d8 465
ac0860d8 466
This page took 0.162633 seconds and 5 git commands to generate.