Blame src/yylex.c

Packit f00812
/* yylex - scanner front-end for flex */
Packit f00812
Packit f00812
/*  Copyright (c) 1990 The Regents of the University of California. */
Packit f00812
/*  All rights reserved. */
Packit f00812
Packit f00812
/*  This code is derived from software contributed to Berkeley by */
Packit f00812
/*  Vern Paxson. */
Packit f00812
Packit f00812
/*  The United States Government has rights in this work pursuant */
Packit f00812
/*  to contract no. DE-AC03-76SF00098 between the United States */
Packit f00812
/*  Department of Energy and the University of California. */
Packit f00812
Packit f00812
/*  This file is part of flex. */
Packit f00812
Packit f00812
/*  Redistribution and use in source and binary forms, with or without */
Packit f00812
/*  modification, are permitted provided that the following conditions */
Packit f00812
/*  are met: */
Packit f00812
Packit f00812
/*  1. Redistributions of source code must retain the above copyright */
Packit f00812
/*     notice, this list of conditions and the following disclaimer. */
Packit f00812
/*  2. Redistributions in binary form must reproduce the above copyright */
Packit f00812
/*     notice, this list of conditions and the following disclaimer in the */
Packit f00812
/*     documentation and/or other materials provided with the distribution. */
Packit f00812
Packit f00812
/*  Neither the name of the University nor the names of its contributors */
Packit f00812
/*  may be used to endorse or promote products derived from this software */
Packit f00812
/*  without specific prior written permission. */
Packit f00812
Packit f00812
/*  THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */
Packit f00812
/*  IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */
Packit f00812
/*  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
Packit f00812
/*  PURPOSE. */
Packit f00812
Packit f00812
#include <ctype.h>
Packit f00812
#include "flexdef.h"
Packit f00812
#include "parse.h"
Packit f00812
Packit f00812
Packit f00812
/* yylex - scan for a regular expression token */
Packit f00812
Packit f00812
extern char *yytext;
Packit f00812
int     yylex (void)
Packit f00812
{
Packit f00812
	int     toktype;
Packit f00812
	static int beglin = false;
Packit f00812
Packit f00812
	if (eofseen)
Packit f00812
		toktype = EOF;
Packit f00812
	else
Packit f00812
		toktype = flexscan ();
Packit f00812
Packit f00812
	if (toktype == EOF || toktype == 0) {
Packit f00812
		eofseen = 1;
Packit f00812
Packit f00812
		if (sectnum == 1) {
Packit f00812
			synerr (_("premature EOF"));
Packit f00812
			sectnum = 2;
Packit f00812
			toktype = SECTEND;
Packit f00812
		}
Packit f00812
Packit f00812
		else
Packit f00812
			toktype = 0;
Packit f00812
	}
Packit f00812
Packit f00812
	if (trace) {
Packit f00812
		if (beglin) {
Packit f00812
			fprintf (stderr, "%d\t", num_rules + 1);
Packit f00812
			beglin = 0;
Packit f00812
		}
Packit f00812
Packit f00812
		switch (toktype) {
Packit f00812
		case '<':
Packit f00812
		case '>':
Packit f00812
		case '^':
Packit f00812
		case '$':
Packit f00812
		case '"':
Packit f00812
		case '[':
Packit f00812
		case ']':
Packit f00812
		case '{':
Packit f00812
		case '}':
Packit f00812
		case '|':
Packit f00812
		case '(':
Packit f00812
		case ')':
Packit f00812
		case '-':
Packit f00812
		case '/':
Packit f00812
		case '\\':
Packit f00812
		case '?':
Packit f00812
		case '.':
Packit f00812
		case '*':
Packit f00812
		case '+':
Packit f00812
		case ',':
Packit f00812
			(void) putc (toktype, stderr);
Packit f00812
			break;
Packit f00812
Packit f00812
		case '\n':
Packit f00812
			(void) putc ('\n', stderr);
Packit f00812
Packit f00812
			if (sectnum == 2)
Packit f00812
				beglin = 1;
Packit f00812
Packit f00812
			break;
Packit f00812
Packit f00812
		case SCDECL:
Packit f00812
			fputs ("%s", stderr);
Packit f00812
			break;
Packit f00812
Packit f00812
		case XSCDECL:
Packit f00812
			fputs ("%x", stderr);
Packit f00812
			break;
Packit f00812
Packit f00812
		case SECTEND:
Packit f00812
			fputs ("%%\n", stderr);
Packit f00812
Packit f00812
			/* We set beglin to be true so we'll start
Packit f00812
			 * writing out numbers as we echo rules.
Packit f00812
			 * flexscan() has already assigned sectnum.
Packit f00812
			 */
Packit f00812
			if (sectnum == 2)
Packit f00812
				beglin = 1;
Packit f00812
Packit f00812
			break;
Packit f00812
Packit f00812
		case NAME:
Packit f00812
			fprintf (stderr, "'%s'", nmstr);
Packit f00812
			break;
Packit f00812
Packit f00812
		case CHAR:
Packit f00812
			switch (yylval) {
Packit f00812
			case '<':
Packit f00812
			case '>':
Packit f00812
			case '^':
Packit f00812
			case '$':
Packit f00812
			case '"':
Packit f00812
			case '[':
Packit f00812
			case ']':
Packit f00812
			case '{':
Packit f00812
			case '}':
Packit f00812
			case '|':
Packit f00812
			case '(':
Packit f00812
			case ')':
Packit f00812
			case '-':
Packit f00812
			case '/':
Packit f00812
			case '\\':
Packit f00812
			case '?':
Packit f00812
			case '.':
Packit f00812
			case '*':
Packit f00812
			case '+':
Packit f00812
			case ',':
Packit f00812
				fprintf (stderr, "\\%c", yylval);
Packit f00812
				break;
Packit f00812
Packit f00812
			default:
Packit f00812
				if (!isascii (yylval) || !isprint (yylval)) {
Packit f00812
					if(trace_hex)
Packit f00812
						fprintf (stderr, "\\x%02x", (unsigned int) yylval);
Packit f00812
					else
Packit f00812
						fprintf (stderr, "\\%.3o", (unsigned int) yylval);
Packit f00812
				} else
Packit f00812
					(void) putc (yylval, stderr);
Packit f00812
				break;
Packit f00812
			}
Packit f00812
Packit f00812
			break;
Packit f00812
Packit f00812
		case NUMBER:
Packit f00812
			fprintf (stderr, "%d", yylval);
Packit f00812
			break;
Packit f00812
Packit f00812
		case PREVCCL:
Packit f00812
			fprintf (stderr, "[%d]", yylval);
Packit f00812
			break;
Packit f00812
Packit f00812
		case EOF_OP:
Packit f00812
			fprintf (stderr, "<<EOF>>");
Packit f00812
			break;
Packit f00812
Packit f00812
		case TOK_OPTION:
Packit f00812
			fprintf (stderr, "%s ", yytext);
Packit f00812
			break;
Packit f00812
Packit f00812
		case TOK_OUTFILE:
Packit f00812
		case TOK_PREFIX:
Packit f00812
		case CCE_ALNUM:
Packit f00812
		case CCE_ALPHA:
Packit f00812
		case CCE_BLANK:
Packit f00812
		case CCE_CNTRL:
Packit f00812
		case CCE_DIGIT:
Packit f00812
		case CCE_GRAPH:
Packit f00812
		case CCE_LOWER:
Packit f00812
		case CCE_PRINT:
Packit f00812
		case CCE_PUNCT:
Packit f00812
		case CCE_SPACE:
Packit f00812
		case CCE_UPPER:
Packit f00812
		case CCE_XDIGIT:
Packit f00812
			fprintf (stderr, "%s", yytext);
Packit f00812
			break;
Packit f00812
Packit f00812
		case 0:
Packit f00812
			fprintf (stderr, _("End Marker\n"));
Packit f00812
			break;
Packit f00812
Packit f00812
		default:
Packit f00812
			fprintf (stderr,
Packit f00812
				 _
Packit f00812
				 ("*Something Weird* - tok: %d val: %d\n"),
Packit f00812
				 toktype, yylval);
Packit f00812
			break;
Packit f00812
		}
Packit f00812
	}
Packit f00812
Packit f00812
	return toktype;
Packit f00812
}