|
|
1.1 ! root 1: %start SOURCE COMMENT STRING CHAR DEFN SETDEFN INIT C_DEFN C_SETDEFN C_INIT ! 2: ! 3: %{ ! 4: #include "sets.h" ! 5: ! 6: #define RETURN return (int) ! 7: %} ! 8: ! 9: A [A-Za-z_] ! 10: AN [A-Za-z_0-9] ! 11: X [0-9A-Fa-f] ! 12: D [0-9] ! 13: O [0-7] ! 14: WS [ \t\n\f]+ ! 15: ! 16: %% ! 17: ! 18: <SOURCE>"/*" { ! 19: ECHO; ! 20: BEGIN COMMENT; ! 21: } ! 22: ! 23: <SOURCE>\" { ! 24: ECHO; ! 25: BEGIN STRING; ! 26: } ! 27: ! 28: <SOURCE>"'" { ! 29: ECHO; ! 30: BEGIN CHAR; ! 31: } ! 32: ! 33: <SOURCE>set { ! 34: BEGIN SETDEFN; ! 35: RETURN sy_set; ! 36: } ! 37: ! 38: <SOURCE>typedef { ! 39: ECHO; ! 40: BEGIN DEFN; ! 41: RETURN sy_typedef; ! 42: } ! 43: ! 44: <SOURCE>enum { ! 45: ECHO; ! 46: BEGIN DEFN; ! 47: RETURN sy_enum; ! 48: } ! 49: ! 50: <SOURCE>{A}{AN}* ECHO; ! 51: ! 52: <SOURCE>"[[" { ! 53: BEGIN INIT; ! 54: RETURN sy_on_squares; ! 55: } ! 56: ! 57: <SOURCE>. putchar(*yytext); ! 58: ! 59: <STRING>\\\" ECHO; ! 60: ! 61: <STRING>\" { ! 62: ECHO; ! 63: BEGIN SOURCE; ! 64: } ! 65: ! 66: <STRING>\\\\ ECHO; ! 67: ! 68: <STRING>. ECHO; ! 69: ! 70: <CHAR>\\"'" ECHO; ! 71: ! 72: <CHAR>"'" { ! 73: ECHO; ! 74: BEGIN SOURCE; ! 75: } ! 76: ! 77: <CHAR>\\\\ ECHO; ! 78: ! 79: <CHAR>. ECHO; ! 80: ! 81: <COMMENT>"*/" { ! 82: ECHO; ! 83: BEGIN SOURCE; ! 84: } ! 85: ! 86: <COMMENT>. ECHO; ! 87: ! 88: <DEFN>"/*" { ! 89: ECHO; ! 90: BEGIN C_DEFN; ! 91: } ! 92: ! 93: <DEFN>{WS} ECHO; ! 94: ! 95: <DEFN>enum { ! 96: ECHO; ! 97: RETURN sy_enum; ! 98: } ! 99: ! 100: <DEFN>set { ! 101: BEGIN SETDEFN; ! 102: RETURN sy_set; ! 103: } ! 104: ! 105: <DEFN>{A}{AN}* { ! 106: ECHO; ! 107: RETURN sy_id; ! 108: } ! 109: ! 110: <DEFN>"{" { ! 111: ECHO; ! 112: RETURN sy_on_curly; ! 113: } ! 114: ! 115: <DEFN>"}" { ! 116: ECHO; ! 117: RETURN sy_off_curly; ! 118: } ! 119: ! 120: <DEFN>"," { ! 121: ECHO; ! 122: RETURN sy_comma; ! 123: } ! 124: ! 125: <DEFN>. { ! 126: ECHO; ! 127: fprintf(stderr, "%s: line %d, ignored unknown character (%s) in definition\n", myname, yylineno, print_char()); ! 128: } ! 129: ! 130: <C_DEFN>"*/" { ! 131: ECHO; ! 132: BEGIN DEFN; ! 133: } ! 134: ! 135: <C_DEFN>. ECHO; ! 136: ! 137: <SETDEFN>"/*" { ! 138: ECHO; ! 139: BEGIN C_SETDEFN; ! 140: } ! 141: ! 142: <SETDEFN>{WS} ECHO; ! 143: ! 144: <SETDEFN>char RETURN sy_char; ! 145: ! 146: <SETDEFN>{A}{AN}* RETURN sy_id; ! 147: ! 148: <SETDEFN>. fprintf(stderr, "%s: line %d, ignored unknown character (%s) in set definition\n", myname, yylineno, print_char()); ! 149: ! 150: <C_SETDEFN>"*/" { ! 151: ECHO; ! 152: BEGIN SETDEFN; ! 153: } ! 154: ! 155: <C_SETDEFN>. ECHO; ! 156: ! 157: <INIT>"/*" { ! 158: ECHO; ! 159: BEGIN C_INIT; ! 160: } ! 161: ! 162: <INIT>{WS} ECHO; ! 163: ! 164: <INIT>"]]" { ! 165: BEGIN SOURCE; ! 166: RETURN sy_off_squares; ! 167: } ! 168: ! 169: <INIT>"," RETURN sy_comma; ! 170: ! 171: <INIT>".." RETURN sy_dot_dot; ! 172: ! 173: <INIT>{A}{AN}* RETURN sy_id; ! 174: ! 175: <INIT>0[xX]{X}+ { ! 176: sscanf(yytext + 2, "%x", &yylval); ! 177: RETURN sy_int; ! 178: } ! 179: ! 180: <INIT>0{O}+ { ! 181: sscanf(yytext, "%o", &yylval); ! 182: RETURN sy_int; ! 183: } ! 184: ! 185: <INIT>{D}+ { ! 186: sscanf(yytext, "%d", &yylval); ! 187: RETURN sy_int; ! 188: } ! 189: ! 190: <INIT>'.' { ! 191: yylval = yytext[1]; ! 192: RETURN sy_int; ! 193: } ! 194: ! 195: <INIT>'\\{O}[{O}[{O}]]' { ! 196: sscanf(yytext + 2, "%o", &yylval); ! 197: RETURN sy_int; ! 198: } ! 199: ! 200: <INIT>'\\.' { ! 201: switch (yytext[2]) ! 202: { ! 203: case 'n': ! 204: yylval = '\n'; ! 205: break; ! 206: ! 207: case 't': ! 208: yylval = '\t'; ! 209: break; ! 210: ! 211: case 'b': ! 212: yylval = '\b'; ! 213: break; ! 214: ! 215: case 'r': ! 216: yylval = '\r'; ! 217: break; ! 218: ! 219: case 'f': ! 220: yylval = '\f'; ! 221: break; ! 222: ! 223: default: ! 224: yylval = yytext[2]; ! 225: break; ! 226: } ! 227: RETURN sy_int; ! 228: } ! 229: ! 230: <INIT>. fprintf(stderr, "%s: line %d, ignored unknown character (%s) in set initialisation\n", myname, yylineno, print_char()); ! 231: ! 232: <C_INIT>"*/" { ! 233: ECHO; ! 234: BEGIN INIT; ! 235: } ! 236: ! 237: <C_INIT>. ECHO; ! 238: ! 239: %% ! 240: ! 241: begin_source() ! 242: { ! 243: BEGIN SOURCE; ! 244: } ! 245: ! 246: begin_setdefn() ! 247: { ! 248: BEGIN SETDEFN; ! 249: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.