xref: /minix3/external/bsd/flex/dist/examples/testxxLexer.l (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
1*357f1050SThomas Veerman 	// An example of using the flex C++ scanner class.
2*357f1050SThomas Veerman 
3*357f1050SThomas Veerman %option C++ noyywrap
4*357f1050SThomas Veerman 
5*357f1050SThomas Veerman %{
6*357f1050SThomas Veerman int mylineno = 0;
7*357f1050SThomas Veerman %}
8*357f1050SThomas Veerman 
9*357f1050SThomas Veerman string	\"[^\n"]+\"
10*357f1050SThomas Veerman 
11*357f1050SThomas Veerman ws	[ \t]+
12*357f1050SThomas Veerman 
13*357f1050SThomas Veerman alpha	[A-Za-z]
14*357f1050SThomas Veerman dig	[0-9]
15*357f1050SThomas Veerman name	({alpha}|{dig}|\$)({alpha}|{dig}|\_|\.|\-|\/|\$)*
16*357f1050SThomas Veerman num1	[-+]?{dig}+\.?([eE][-+]?{dig}+)?
17*357f1050SThomas Veerman num2	[-+]?{dig}*\.{dig}+([eE][-+]?{dig}+)?
18*357f1050SThomas Veerman number	{num1}|{num2}
19*357f1050SThomas Veerman 
20*357f1050SThomas Veerman %%
21*357f1050SThomas Veerman 
22*357f1050SThomas Veerman {ws}	/* skip blanks and tabs */
23*357f1050SThomas Veerman 
24*357f1050SThomas Veerman "/*"		{
25*357f1050SThomas Veerman 		int c;
26*357f1050SThomas Veerman 
27*357f1050SThomas Veerman 		while((c = yyinput()) != 0)
28*357f1050SThomas Veerman 			{
29*357f1050SThomas Veerman 			if(c == '\n')
30*357f1050SThomas Veerman 				++mylineno;
31*357f1050SThomas Veerman 
32*357f1050SThomas Veerman 			else if(c == '*')
33*357f1050SThomas Veerman 				{
34*357f1050SThomas Veerman 				if((c = yyinput()) == '/')
35*357f1050SThomas Veerman 					break;
36*357f1050SThomas Veerman 				else
37*357f1050SThomas Veerman 					unput(c);
38*357f1050SThomas Veerman 				}
39*357f1050SThomas Veerman 			}
40*357f1050SThomas Veerman 		}
41*357f1050SThomas Veerman 
42*357f1050SThomas Veerman {number}	FLEX_STD cout << "number " << YYText() << '\n';
43*357f1050SThomas Veerman 
44*357f1050SThomas Veerman \n		mylineno++;
45*357f1050SThomas Veerman 
46*357f1050SThomas Veerman {name}		FLEX_STD cout << "name " << YYText() << '\n';
47*357f1050SThomas Veerman 
48*357f1050SThomas Veerman {string}	FLEX_STD cout << "string " << YYText() << '\n';
49*357f1050SThomas Veerman 
50*357f1050SThomas Veerman %%
51*357f1050SThomas Veerman 
52*357f1050SThomas Veerman int main( int /* argc */, char** /* argv */ )
53*357f1050SThomas Veerman 	{
54*357f1050SThomas Veerman 	FlexLexer* lexer = new yyFlexLexer;
55*357f1050SThomas Veerman 	while(lexer->yylex() != 0)
56*357f1050SThomas Veerman 		;
57*357f1050SThomas Veerman 	return 0;
58*357f1050SThomas Veerman 	}
59