⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 awk.lx.l

📁 <B>Digital的Unix操作系统VAX 4.2源码</B>
💻 L
字号:
/*	awk.lx.l	4.2	83/02/09	*/%Start A str chc sc reg comment%{#include	"awk.h"#include	"awk.def"#undef	input	/* defeat lex */extern int	yylval;extern int	mustfld;int	lineno	= 1;#ifdef	DEBUG#	define	RETURN(x)	{if (dbg) ptoken(x); return(x); }#else#	define	RETURN(x)	return(x)#endif#define	CADD	cbuf[clen++]=yytext[0]; if(clen>=CBUFLEN-1) {yyerror("string too long", cbuf); BEGIN A;}#define	CBUFLEN	150char	cbuf[CBUFLEN];int	clen, cflag;%}A	[a-zA-Z_]B	[a-zA-Z0-9_]D	[0-9]WS	[ \t]%%	switch (yybgin-yysvec-1) {	/* witchcraft */	case 0:		BEGIN A;		break;	case sc:		BEGIN A;		RETURN('}');	}<A>^\n		lineno++;<A>^{WS}*#.*\n	lineno++;	/* strip comment lines */<A>{WS}		;<A,reg>"\\"\n	lineno++;<A>"||"		RETURN(BOR);<A>BEGIN	RETURN(XBEGIN);<A>END		RETURN(XEND);<A>PROGEND	RETURN(EOF);<A>"&&"		RETURN(AND);<A>"!"		RETURN(NOT);<A>"!="		{ yylval = NE; RETURN(RELOP); }<A>"~"		{ yylval = MATCH; RETURN(MATCHOP); }<A>"!~"		{ yylval = NOTMATCH; RETURN(MATCHOP); }<A>"<"		{ yylval = LT; RETURN(RELOP); }<A>"<="		{ yylval = LE; RETURN(RELOP); }<A>"=="		{ yylval = EQ; RETURN(RELOP); }<A>">="		{ yylval = GE; RETURN(RELOP); }<A>">"		{ yylval = GT; RETURN(RELOP); }<A>">>"		{ yylval = APPEND; RETURN(RELOP); }<A>"++"		{ yylval = INCR; RETURN(INCR); }<A>"--"		{ yylval = DECR; RETURN(DECR); }<A>"+="		{ yylval = ADDEQ; RETURN(ASGNOP); }<A>"-="		{ yylval = SUBEQ; RETURN(ASGNOP); }<A>"*="		{ yylval = MULTEQ; RETURN(ASGNOP); }<A>"/="		{ yylval = DIVEQ; RETURN(ASGNOP); }<A>"%="		{ yylval = MODEQ; RETURN(ASGNOP); }<A>"="		{ yylval = ASSIGN; RETURN(ASGNOP); }<A>"$"{D}+	{	if (atoi(yytext+1)==0) {				yylval = (hack)lookup("$record", symtab, 0);				RETURN(STRING);			} else {				yylval = fieldadr(atoi(yytext+1));				RETURN(FIELD);			}		}<A>"$"{WS}*	{ RETURN(INDIRECT); }<A>NF		{ mustfld=1; yylval = (hack)setsymtab(yytext, EMPTY, 0.0, NUM, symtab); RETURN(VAR); }<A>({D}+("."?){D}*|"."{D}+)((e|E)("+"|-)?{D}+)?	{		yylval = (hack)setsymtab(yytext, EMPTY, atof(yytext), CON|NUM, symtab); RETURN(NUMBER); }<A>"}"{WS}*\n	{ BEGIN sc; lineno++; RETURN(';'); }<A>"}"		{ BEGIN sc; RETURN(';'); }<A>;\n		{ lineno++; RETURN(';'); }<A>\n		{ lineno++; RETURN(NL); }<A>while	RETURN(WHILE);<A>for		RETURN(FOR);<A>if		RETURN(IF);<A>else		RETURN(ELSE);<A>next		RETURN(NEXT);<A>exit		RETURN(EXIT);<A>break	RETURN(BREAK);<A>continue	RETURN(CONTINUE);<A>print	{ yylval = PRINT; RETURN(PRINT); }<A>printf	{ yylval = PRINTF; RETURN(PRINTF); }<A>sprintf	{ yylval = SPRINTF; RETURN(SPRINTF); }<A>split	{ yylval = SPLIT; RETURN(SPLIT); }<A>substr	RETURN(SUBSTR);<A>index	RETURN(INDEX);<A>in		RETURN(IN);<A>getline	RETURN(GETLINE);<A>length	{ yylval = FLENGTH; RETURN(FNCN); }<A>log		{ yylval = FLOG; RETURN(FNCN); }<A>int		{ yylval = FINT; RETURN(FNCN); }<A>exp		{ yylval = FEXP; RETURN(FNCN); }<A>sqrt		{ yylval = FSQRT; RETURN(FNCN); }<A>{A}{B}*	{ yylval = (hack)setsymtab(yytext, tostring(""), 0.0, STR|NUM, symtab); RETURN(VAR); }<A>\"		{ BEGIN str; clen=0; }<A>#		{ BEGIN comment; }<comment>\n	{ BEGIN A; lineno++; RETURN(NL); }<comment>.	;<A>.		{ yylval = yytext[0]; RETURN(yytext[0]); }<reg>"["	{ BEGIN chc; clen=0; cflag=0; }<reg>"[^"	{ BEGIN chc; clen=0; cflag=1; }<reg>"?"	RETURN(QUEST);<reg>"+"	RETURN(PLUS);<reg>"*"	RETURN(STAR);<reg>"|"	RETURN(OR);<reg>"."	RETURN(DOT);<reg>"("	RETURN('(');<reg>")"	RETURN(')');<reg>"^"	RETURN('^');<reg>"$"	RETURN('$');<reg>\\{D}{D}{D}	{ sscanf(yytext+1, "%o", &yylval); RETURN(CHAR); }<reg>\\.	{	if (yytext[1]=='n') yylval = '\n';			else if (yytext[1] == 't') yylval = '\t';			else yylval = yytext[1];			RETURN(CHAR);		}<reg>"/"	{ BEGIN A; unput('/'); }<reg>\n		{ yyerror("newline in regular expression"); lineno++; BEGIN A; }<reg>.		{ yylval = yytext[0]; RETURN(CHAR); }<str>\"		{ char *s; BEGIN A; cbuf[clen]=0; s = tostring(cbuf);		cbuf[clen] = ' '; cbuf[++clen] = 0;		yylval = (hack)setsymtab(cbuf, s, 0.0, CON|STR, symtab); RETURN(STRING); }<str>\n		{ yyerror("newline in string"); lineno++; BEGIN A; }<str>"\\\""	{ cbuf[clen++]='"'; }<str,chc>"\\"n	{ cbuf[clen++]='\n'; }<str,chc>"\\"t	{ cbuf[clen++]='\t'; }<str,chc>"\\\\"	{ cbuf[clen++]='\\'; }<str>.		{ CADD; }<chc>"\\""]"	{ cbuf[clen++]=']'; }<chc>"]"	{ BEGIN reg; cbuf[clen]=0; yylval = (hack)tostring(cbuf);		if (cflag==0) { RETURN(CCL); }		else { RETURN(NCCL); } }<chc>\n		{ yyerror("newline in character class"); lineno++; BEGIN A; }<chc>.		{ CADD; }%%input(){	register c;	extern char *lexprog;	if (yysptr > yysbuf)		c = U(*--yysptr);	else if (yyin == NULL)		c = *lexprog++;	else		c = getc(yyin);	if (c == '\n')		yylineno++;	else if (c == EOF)		c = 0;	return(c);}startreg(){	BEGIN reg;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -