1 /* Generated by re2c */
2 #line 1 "calc_002.re"
3 // re2c $INPUT -o $OUTPUT
4 /* re2c lesson 001_upn_calculator, calc_002, (c) M. Boerger 2006 - 2007 */
5 #line 19 "calc_002.re"
6 
7 
8 #include <stdlib.h>
9 #include <stdio.h>
10 #include <string.h>
11 
fill(char * p,int n,char ** l)12 int fill(char *p, int n, char **l)
13 {
14 	while (*++p && n--) ;
15 	* l = p;
16 	return n <= 0;
17 }
18 
scan(char * s)19 int scan(char *s)
20 {
21 	char *p = s;
22 	char *l = s;
23 	char *q = 0;
24 #define YYCTYPE         char
25 #define YYCURSOR        p
26 #define YYLIMIT         l
27 #define YYMARKER        q
28 #define YYFILL(n)		{ if (!fill(p, n, &l)) break; }
29 
30 	for(;;)
31 	{
32 
33 #line 34 "calc_002.c"
34 		{
35 			YYCTYPE yych;
36 			if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
37 			yych = *YYCURSOR;
38 			switch (yych) {
39 			case 0x00:	goto yy2;
40 			case '+':	goto yy6;
41 			case '-':	goto yy8;
42 			case '0':	goto yy10;
43 			case '1':
44 			case '2':
45 			case '3':
46 			case '4':
47 			case '5':
48 			case '6':
49 			case '7':
50 			case '8':
51 			case '9':	goto yy12;
52 			default:	goto yy4;
53 			}
54 yy2:
55 			++YYCURSOR;
56 #line 52 "calc_002.re"
57 			{ printf("EOF\n");	return 0; }
58 #line 59 "calc_002.c"
59 yy4:
60 			++YYCURSOR;
61 #line 53 "calc_002.re"
62 			{ printf("ERR\n");	return 1; }
63 #line 64 "calc_002.c"
64 yy6:
65 			++YYCURSOR;
66 #line 50 "calc_002.re"
67 			{ printf("+\n");	continue; }
68 #line 69 "calc_002.c"
69 yy8:
70 			++YYCURSOR;
71 #line 51 "calc_002.re"
72 			{ printf("+\n");	continue; }
73 #line 74 "calc_002.c"
74 yy10:
75 			yych = *++YYCURSOR;
76 			switch (yych) {
77 			case '0':
78 			case '1':
79 			case '2':
80 			case '3':
81 			case '4':
82 			case '5':
83 			case '6':
84 			case '7':
85 			case '8':
86 			case '9':	goto yy15;
87 			default:	goto yy11;
88 			}
89 yy11:
90 #line 49 "calc_002.re"
91 			{ printf("Num\n");	continue; }
92 #line 93 "calc_002.c"
93 yy12:
94 			++YYCURSOR;
95 			if (YYLIMIT <= YYCURSOR) YYFILL(1);
96 			yych = *YYCURSOR;
97 			switch (yych) {
98 			case '0':
99 			case '1':
100 			case '2':
101 			case '3':
102 			case '4':
103 			case '5':
104 			case '6':
105 			case '7':
106 			case '8':
107 			case '9':	goto yy12;
108 			default:	goto yy14;
109 			}
110 yy14:
111 #line 48 "calc_002.re"
112 			{ printf("Num\n");	continue; }
113 #line 114 "calc_002.c"
114 yy15:
115 			++YYCURSOR;
116 			if (YYLIMIT <= YYCURSOR) YYFILL(1);
117 			yych = *YYCURSOR;
118 			switch (yych) {
119 			case '0':
120 			case '1':
121 			case '2':
122 			case '3':
123 			case '4':
124 			case '5':
125 			case '6':
126 			case '7':
127 			case '8':
128 			case '9':	goto yy15;
129 			default:	goto yy17;
130 			}
131 yy17:
132 #line 47 "calc_002.re"
133 			{ printf("Oct\n");	continue; }
134 #line 135 "calc_002.c"
135 		}
136 #line 54 "calc_002.re"
137 
138 	}
139 	printf("OOD\n"); return 2;
140 }
141 
main(int argc,char ** argv)142 int main(int argc, char **argv)
143 {
144 	if (argc > 1)
145 	{
146 		return scan(argv[1]);
147 	}
148 	else
149 	{
150 		fprintf(stderr, "%s <expr>\n", argv[0]);
151 		return 0;
152 	}
153 }
154