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