File:  [Research Unix] / researchv10dc / cmd / cyntax / sets / sets.lex.l
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 17:21:34 2018 UTC (8 years, 3 months ago) by root
Branches: belllabs, MAIN
CVS tags: researchv10, HEAD
researchv10 Dan Cross

%start	SOURCE COMMENT STRING CHAR DEFN SETDEFN INIT C_DEFN C_SETDEFN C_INIT

%{
#include	"sets.h"

#define	RETURN		return (int)
%}

A	[A-Za-z_]
AN	[A-Za-z_0-9]
X	[0-9A-Fa-f]
D	[0-9]
O	[0-7]
WS	[ \t\n\f]+

%%

<SOURCE>"/*"		{
				ECHO;
				BEGIN COMMENT;
			}

<SOURCE>\"		{
				ECHO;
				BEGIN STRING;
			}

<SOURCE>"'"		{
				ECHO;
				BEGIN CHAR;
			}

<SOURCE>set		{
				BEGIN SETDEFN;
				RETURN sy_set;
			}

<SOURCE>typedef		{
				ECHO;
				BEGIN DEFN;
				RETURN sy_typedef;
			}

<SOURCE>enum		{
				ECHO;
				BEGIN DEFN;
				RETURN sy_enum;
			}

<SOURCE>{A}{AN}*	ECHO;

<SOURCE>"[["		{
				BEGIN INIT;
				RETURN sy_on_squares;
			}

<SOURCE>.		putchar(*yytext);

<STRING>\\\"		ECHO;

<STRING>\"		{
				ECHO;
				BEGIN SOURCE;
			}

<STRING>\\\\		ECHO;

<STRING>.		ECHO;

<CHAR>\\"'"		ECHO;

<CHAR>"'"		{
				ECHO;
				BEGIN SOURCE;
			}

<CHAR>\\\\		ECHO;

<CHAR>.			ECHO;

<COMMENT>"*/"		{
				ECHO;
				BEGIN SOURCE;
			}

<COMMENT>.		ECHO;

<DEFN>"/*"		{
				ECHO;
				BEGIN C_DEFN;
			}

<DEFN>{WS}		ECHO;

<DEFN>enum		{
				ECHO;
				RETURN sy_enum;
			}

<DEFN>set		{
				BEGIN SETDEFN;
				RETURN sy_set;
			}

<DEFN>{A}{AN}*		{
				ECHO;
				RETURN sy_id;
			}

<DEFN>"{"		{
				ECHO;
				RETURN sy_on_curly;
			}

<DEFN>"}"		{
				ECHO;
				RETURN sy_off_curly;
			}

<DEFN>","		{
				ECHO;
				RETURN sy_comma;
			}

<DEFN>.			{
				ECHO;
				fprintf(stderr, "%s: line %d, ignored unknown character (%s) in definition\n", myname, yylineno, print_char());
			}

<C_DEFN>"*/"		{
				ECHO;
				BEGIN DEFN;
			}

<C_DEFN>.		ECHO;

<SETDEFN>"/*"		{
				ECHO;
				BEGIN C_SETDEFN;
			}

<SETDEFN>{WS}		ECHO;

<SETDEFN>char		RETURN sy_char;

<SETDEFN>{A}{AN}*	RETURN sy_id;

<SETDEFN>.		fprintf(stderr, "%s: line %d, ignored unknown character (%s) in set definition\n", myname, yylineno, print_char());

<C_SETDEFN>"*/"		{
				ECHO;
				BEGIN SETDEFN;
			}

<C_SETDEFN>.		ECHO;

<INIT>"/*"		{
				ECHO;
				BEGIN C_INIT;
			}

<INIT>{WS}		ECHO;

<INIT>"]]"		{
				BEGIN SOURCE;
				RETURN sy_off_squares;
			}

<INIT>","		RETURN sy_comma;

<INIT>".."		RETURN sy_dot_dot;

<INIT>{A}{AN}*		RETURN sy_id;

<INIT>0[xX]{X}+		{
				sscanf(yytext + 2, "%x", &yylval);
				RETURN sy_int;
			}

<INIT>0{O}+		{
				sscanf(yytext, "%o", &yylval);
				RETURN sy_int;
			}

<INIT>{D}+		{
				sscanf(yytext, "%d", &yylval);
				RETURN sy_int;
			}

<INIT>'.'		{
				yylval = yytext[1];
				RETURN sy_int;
			}

<INIT>'\\{O}[{O}[{O}]]'	{
				sscanf(yytext + 2, "%o", &yylval);
				RETURN sy_int;
			}

<INIT>'\\.'		{
				switch (yytext[2])
				{
				case 'n':
					yylval = '\n';
					break;

				case 't':
					yylval = '\t';
					break;

				case 'b':
					yylval = '\b';
					break;

				case 'r':
					yylval = '\r';
					break;

				case 'f':
					yylval = '\f';
					break;

				default:
					yylval = yytext[2];
					break;
				}
				RETURN sy_int;
			}

<INIT>.			fprintf(stderr, "%s: line %d, ignored unknown character (%s) in set initialisation\n", myname, yylineno, print_char());

<C_INIT>"*/"		{
				ECHO;
				BEGIN INIT;
			}

<C_INIT>.		ECHO;

%%

begin_source()
{
	BEGIN SOURCE;
}

begin_setdefn()
{
	BEGIN SETDEFN;
}

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.