DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T l

⟦d5e0afca6⟧ TextFile

    Length: 6345 (0x18c9)
    Types: TextFile
    Names: »lexicalinput«

Derivation

└─⟦db229ac7e⟧ Bits:30007240 EUUGD20: SSBA 1.2 / AFW Benchmarks
    └─⟦this⟧ »EUUGD20/AFUU-ssba1.21/ssba1.21E/tools/lexicalinput« 
    └─⟦this⟧ »EUUGD20/AFUU-ssba1.21/ssba1.21F/outils/lexicalinput« 

TextFile

%{
/*	$Header: lexan.l,v 1.9 88/01/25 15:41:02 root Locked $	*/

/*
 *	lexan.l -- Lexical Analyzer for EASE.
 *
 *		   Contains code for lex(1) which generates a lexical
 *		   analyzer (lex.yy.c) for Ease, a high-level specification 
 *		   format for sendmail configuration files.
 *
 *	author -- James S. Schoner, Purdue University Computing Center,
 *				    West Lafayette, Indiana  47907
 *
 *	date   -- July 1, 1985
 *
 *	Copyright (c) 1985 by Purdue Research Foundation
 *
 *	All rights reserved.
 *
 */

#include "fixstrings.h"
#include "symtab.h"
#include "lexdefs.h"

#define  LEXnewline '\n'
#define	 LEXeof	    '\0'
#define  MaxFN	    200			/* maximum file name length */

extern struct he *LookupSymbol ();
extern void	  ErrorReport ();

int  Lcount;				/* line counter		    */
char FNbuf[MaxFN];			/* file name buffer	    */
short RMatch  = FALSE;			/* ruleset match flag  	    */

#undef input
# define input() (((yytchar=yysptr>yysbuf?U(*--yysptr):Getc(yyin,yyout))==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)

char
Getc (yyin, yyout)
	FILE *yyin, *yyout;
{
	static char linbuf[BUFSIZ], *pc = linbuf;
	char c;

	/* initialize buffer: first call only */
	if (*pc == '\0' && pc == linbuf) {
		if (fgets(linbuf, BUFSIZ, yyin)==NULL)
			return EOF;
		fprintf(yyout, "# %s", linbuf);  /* echo input as comment */
	}
	c = *pc++;
	if (c == '\n') {
		pc = linbuf;
		if (fgets(linbuf, BUFSIZ, yyin) == NULL)
			*pc = EOF;
		else
			/* echo input as comment */
			fprintf(yyout, "# %s", linbuf);
	}
	return c;
}

%}

/* lex-specific extensions */
%e 1300
%p 4000
%n 600

%%
	int INch;			/* any input character */

[ \t\f]+			; 	/* discard whitepsace  */
[\n]				Lcount++;
^\#[ \t]*[0-9]+[ \t]*\".*\"[ \t]*[\n]	{
			        sscanf (yytext, "%*c%d%s", &Lcount, FNbuf);
			        }
match				return (MATCH);
in				return (IN);
map				return (MAP);
bind				return (BIND);
define				return (DEFINE);
macro				return (MACRO);
class				return (CLASS);
options				return (OPTIONS);
precedence			return (PRECEDENCE);
trusted				return (TRUSTED);
header				return (HEADER);
ruleset				return (RULESET);
mailer				return (MAILER);
host				return (HOST);
user				return (USER);
hostnum				return (HOSTNUM);
while		|
if				return (IF);
retry				return (RETRY);
next				return (NEXT);
return				return (RETURN);
resolve				return (RESOLVE);
for				return (FOR);
field				return (FIELD);
concat				return (CONCAT);
ifset				return (IFSET);
canon				return (CANON);
readclass			return (READCLASS);
Path				return (MPATH);
Flags				return (MFLAGS);
Sender				return (MSENDER);
Recipient			return (MRECIPIENT);
Argv				return (MARGV);
Eol				return (MEOL);
Maxsize				return (MMAXSIZE);
o_alias				return (AAOPT);
o_ewait				return (AOPT);
o_bsub				return (BBOPT);
o_qwait				return (COPT);
o_delivery			return (DOPT);
d_interactive			return (DOPTI);
d_background			return (DOPTB);
d_queue				return (DOPTQ);
o_rebuild			return (DDOPT);
o_handling			return (EOPT);
h_print				return (EOPTP);
h_exit				return (EOPTE);
h_mail				return (EOPTM);
h_write				return (EOPTW);
h_mailz				return (EOPTZ);
o_tmode				return (FFOPT);
o_usave				return (FOPT);
o_gid				return (GOPT);
o_fsmtp				return (HHOPT);
o_skipd				return (IOPT);
o_slog				return (LLOPT);
o_rsend				return (MOPT);
o_dnet				return (NNOPT);
o_hformat			return (OOPT);
o_qfactor			return (QOPT);
o_qdir				return (QQOPT);
o_tread				return (ROPT);
o_flog				return (SSOPT);
o_safe				return (SOPT);
o_qtimeout			return (TTOPT);
o_timezone			return (TOPT);
o_dmuid				return (UOPT);
o_verbose			return (VOPT);
o_wizpass			return (WWOPT);
o_loadq				return (XOPT);
o_loadnc			return (XXOPT);
o_recipfactor			return (YOPT);
o_newproc			return (YYOPT);
o_prifactor			return (ZOPT);
o_waitfactor			return (ZZOPT);
f_ffrom				return (FFLAG);
f_rfrom				return (RFLAG);
f_noreset			return (SSFLAG);
f_noufrom			return (NFLAG);
f_locm				return (LFLAG);
f_strip				return (SFLAG);
f_mult				return (MFLAG);
f_from				return (FFFLAG);
f_date				return (DDFLAG);
f_mesg				return (MMFLAG);
f_full				return (XFLAG);
f_return			return (PPFLAG);
f_upperu			return (UFLAG);
f_upperh			return (HFLAG);
f_arpa				return (AAFLAG);
f_ufrom				return (UUFLAG);
f_expensive			return (EFLAG);
f_dot				return (XXFLAG);
f_llimit			return (LLFLAG);
f_retsmtp			return (PFLAG);
f_smtp				return (IIFLAG);
f_addrw				return (CCFLAG);
f_escape			return (EEFLAG);
[A-Za-z][A-Za-z0-9_-]*		{
				/* store identifiers in symbol table */
				yylval.phe = LookupSymbol (yytext);
				return (IDENT);
				}
["]((\\\n)|(\\\")|[^"\n])*	{
				if ((INch = input()) == LEXnewline) {
					ErrorReport ("End of line in string.\n");
					unput (INch);
				}
				fixquotes ();
				yylval.psb = (char *) malloc (strlen (yytext) + 1);
				strcpy (yylval.psb, yytext + 1);
				return (SCONST);
				}
[0][0-7]*			{
				sscanf (yytext, "%o", &yylval.ival);  /* octal constant */
				return (ICONST);
				}
[-]?[1-9][0-9]*			{
				yylval.ival = atoi (yytext);
				return (ICONST);
				}
"="				return (ASGN);
","				return (COMMA);
"{"				return (LBRACE);
"}"				return (RBRACE);
"("				return (LPAREN);
")"				return (RPAREN);
";"				return (SEMI);
"$"				return (DOLLAR);
":"				return (COLON);
"*"				return (STAR);
"/*"				{
				/* eat C comments */
				INch = input ();
				while ((INch != '*') || 
				      ((INch = input ()) != '/')) {
					if (INch == LEXnewline)
						Lcount++;
					else
						if (INch == LEXeof) {
							ErrorReport ("End of file in comment.\n");
							break;
						}
					if (INch != '*')
						INch = input ();
				}
				}
[\\]?.				{
				if (RMatch) {	/* in rulesets, return literal character */
					yylval.ival = (yytext[0] == '\\') ? yytext[1] : yytext[0];
					return (SEPCHAR);
				} else {
					ErrorReport ("Illegal delimiter character");
					printf (": (octal code) \\%03o\n", *yytext);
				}
				}
%%

/*
 * fixquotes --- inside a "quoted string", turn `\"' into just `"'
 *
 * this is most useful inside the Argv strings for mailers,
 * particularly when debugging.
 */

fixquotes ()
{
	register char *cp1, *cp2;

	cp1 = cp2 = yytext;
	while (*cp2) {
		/*
		 * if we really wanted to get fancy,
		 * at this point we'd handle C escapes,
		 * but I don't think it's necessary.
		 */
		if (*cp2 == '\\' && cp2[1] == '"')
			cp2++;
		*cp1++ = *cp2++;
	}
	*cp1++ = *cp2++;	/* final '\0' */
}