|
|
1.1 ! root 1: /* yylex - scanner front-end for flex */ ! 2: ! 3: /*- ! 4: * Copyright (c) 1990 The Regents of the University of California. ! 5: * All rights reserved. ! 6: * ! 7: * This code is derived from software contributed to Berkeley by ! 8: * Vern Paxson. ! 9: * ! 10: * The United States Government has rights in this work pursuant ! 11: * to contract no. DE-AC03-76SF00098 between the United States ! 12: * Department of Energy and the University of California. ! 13: * ! 14: * Redistribution and use in source and binary forms are permitted provided ! 15: * that: (1) source distributions retain this entire copyright notice and ! 16: * comment, and (2) distributions including binaries display the following ! 17: * acknowledgement: ``This product includes software developed by the ! 18: * University of California, Berkeley and its contributors'' in the ! 19: * documentation or other materials provided with the distribution and in ! 20: * all advertising materials mentioning features or use of this software. ! 21: * Neither the name of the University nor the names of its contributors may ! 22: * be used to endorse or promote products derived from this software without ! 23: * specific prior written permission. ! 24: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED ! 25: * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF ! 26: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ! 27: */ ! 28: ! 29: #ifndef lint ! 30: static char sccsid[] = "@(#)yylex.c 5.2 (Berkeley) 6/18/90"; ! 31: #endif /* not lint */ ! 32: ! 33: #include <ctype.h> ! 34: #include "flexdef.h" ! 35: #include "parse.h" ! 36: ! 37: ! 38: /* ANSI C does not guarantee that isascii() is defined */ ! 39: #ifndef isascii ! 40: #define isascii(c) ((c) <= 0177) ! 41: #endif ! 42: ! 43: ! 44: /* yylex - scan for a regular expression token ! 45: * ! 46: * synopsis ! 47: * ! 48: * token = yylex(); ! 49: * ! 50: * token - return token found ! 51: */ ! 52: ! 53: int yylex() ! 54: ! 55: { ! 56: int toktype; ! 57: static int beglin = false; ! 58: ! 59: if ( eofseen ) ! 60: toktype = EOF; ! 61: else ! 62: toktype = flexscan(); ! 63: ! 64: if ( toktype == EOF || toktype == 0 ) ! 65: { ! 66: eofseen = 1; ! 67: ! 68: if ( sectnum == 1 ) ! 69: { ! 70: synerr( "premature EOF" ); ! 71: sectnum = 2; ! 72: toktype = SECTEND; ! 73: } ! 74: ! 75: else if ( sectnum == 2 ) ! 76: { ! 77: sectnum = 3; ! 78: toktype = 0; ! 79: } ! 80: ! 81: else ! 82: toktype = 0; ! 83: } ! 84: ! 85: if ( trace ) ! 86: { ! 87: if ( beglin ) ! 88: { ! 89: fprintf( stderr, "%d\t", num_rules + 1 ); ! 90: beglin = 0; ! 91: } ! 92: ! 93: switch ( toktype ) ! 94: { ! 95: case '<': ! 96: case '>': ! 97: case '^': ! 98: case '$': ! 99: case '"': ! 100: case '[': ! 101: case ']': ! 102: case '{': ! 103: case '}': ! 104: case '|': ! 105: case '(': ! 106: case ')': ! 107: case '-': ! 108: case '/': ! 109: case '\\': ! 110: case '?': ! 111: case '.': ! 112: case '*': ! 113: case '+': ! 114: case ',': ! 115: (void) putc( toktype, stderr ); ! 116: break; ! 117: ! 118: case '\n': ! 119: (void) putc( '\n', stderr ); ! 120: ! 121: if ( sectnum == 2 ) ! 122: beglin = 1; ! 123: ! 124: break; ! 125: ! 126: case SCDECL: ! 127: fputs( "%s", stderr ); ! 128: break; ! 129: ! 130: case XSCDECL: ! 131: fputs( "%x", stderr ); ! 132: break; ! 133: ! 134: case WHITESPACE: ! 135: (void) putc( ' ', stderr ); ! 136: break; ! 137: ! 138: case SECTEND: ! 139: fputs( "%%\n", stderr ); ! 140: ! 141: /* we set beglin to be true so we'll start ! 142: * writing out numbers as we echo rules. flexscan() has ! 143: * already assigned sectnum ! 144: */ ! 145: ! 146: if ( sectnum == 2 ) ! 147: beglin = 1; ! 148: ! 149: break; ! 150: ! 151: case NAME: ! 152: fprintf( stderr, "'%s'", nmstr ); ! 153: break; ! 154: ! 155: case CHAR: ! 156: switch ( yylval ) ! 157: { ! 158: case '<': ! 159: case '>': ! 160: case '^': ! 161: case '$': ! 162: case '"': ! 163: case '[': ! 164: case ']': ! 165: case '{': ! 166: case '}': ! 167: case '|': ! 168: case '(': ! 169: case ')': ! 170: case '-': ! 171: case '/': ! 172: case '\\': ! 173: case '?': ! 174: case '.': ! 175: case '*': ! 176: case '+': ! 177: case ',': ! 178: fprintf( stderr, "\\%c", yylval ); ! 179: break; ! 180: ! 181: default: ! 182: if ( ! isascii( yylval ) || ! isprint( yylval ) ) ! 183: fprintf( stderr, "\\%.3o", yylval ); ! 184: else ! 185: (void) putc( yylval, stderr ); ! 186: break; ! 187: } ! 188: ! 189: break; ! 190: ! 191: case NUMBER: ! 192: fprintf( stderr, "%d", yylval ); ! 193: break; ! 194: ! 195: case PREVCCL: ! 196: fprintf( stderr, "[%d]", yylval ); ! 197: break; ! 198: ! 199: case EOF_OP: ! 200: fprintf( stderr, "<<EOF>>" ); ! 201: break; ! 202: ! 203: case 0: ! 204: fprintf( stderr, "End Marker" ); ! 205: break; ! 206: ! 207: default: ! 208: fprintf( stderr, "*Something Weird* - tok: %d val: %d\n", ! 209: toktype, yylval ); ! 210: break; ! 211: } ! 212: } ! 213: ! 214: return ( toktype ); ! 215: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.