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