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

📄 boa_lexer.l

📁 boa:Linux系统中的轻量级Web服务
💻 L
字号:
%{/* *  Boa, an http server *  Copyright (C) 1995 Paul Phillips <psp@well.com> * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 1, or (at your option) *  any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this program; if not, write to the Free Software *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * *//* $Id: boa_lexer.l,v 1.13.2.1 2002/07/07 23:19:55 jnelson Exp $*/#include "y.tab.h"#include <stdlib.h>#include <unistd.h>#include "parse.h"#define MAX_STR_CONST 1024#define qspush(c) \	if (string_buf_ptr < string_buf+MAX_STR_CONST) \		*string_buf_ptr++ = c; \	else \		yyerror("quoted string overflow");char *mime_types = NULL;static int file = 0;int lineno = 1;struct ccommand *k; char string_buf[MAX_STR_CONST];char *string_buf_ptr;%}%s MIME/* Quoted string handling (almost) straight out of   the flex 2.5 man page, April 1995 */%x STR%%[ \t]+		;#.*		;<MIME>[^ \t\n]+\/[^ \t\n]+	{ yylval.sval = yytext; return MIMETYPE; }[^ \"\t\n]+	{ /* XXX could use better checks that we are in a state to		   * accept keywords; this version matches original behavior */		  if ((YYSTATE==INITIAL) && (k=lookup_keyword(yytext))) {		      yylval.cval=k;		      return (k->type);		  } else { yylval.sval = yytext; return STRING; }                }\"	{	string_buf_ptr = string_buf;	BEGIN(STR);	}<STR>{\"	{ /* saw closing quote - all done */	BEGIN(INITIAL);	*string_buf_ptr = '\0';	/* return string constant token type and value to parser */	yylval.sval = string_buf; return STRING;	}\n	{	/* error - unterminated string constant */	/* generate error message */	yyerror("unterminated string constant");	}\\[0-7]{1,3}  {	/* octal escape sequence */	int result;	(void) sscanf( yytext + 1, "%o", &result );	if ( result > 0xff )		{ /* error, constant is out-of-bounds */ }	qspush(result);	}\\[0-9]+  {	/* generate error - bad escape sequence; something	 * like '\48' or '\0777777'	 */	yyerror("bad escape sequence");	}\\n	qspush('\n');\\t	qspush('\t');\\r	qspush('\r');\\b	qspush('\b');\\f	qspush('\f');\\(.|\n)  *string_buf_ptr++ = yytext[1];[^\\\n\"]+  {	char *yptr = yytext;	while ( *yptr )		qspush(*yptr++);	}}	/* End of <STR> dependence */\n		{ lineno++; }%%/* In yywrap we track which file we are on. * 1: close boa.conf, open mime.types * 2: return 1; */int yywrap(){    fclose(yyin);    file++;     switch(file) {      case 1:	yyin = fopen(mime_types, "r");	if(!yyin) {	    fprintf(stderr, "Could not open mime.types file, \"%s\", "	    	"for reading\n", mime_types);	    exit(1);	}	BEGIN MIME;	return 0;      default:	BEGIN INITIAL;	file = 0;		/* in case we reread config files */	return 1;    }}int yyerror(char * msg){    fprintf(stderr, "Error on line %d of %s: %s\n", lineno,       (file == 0 ? "boa.conf" : "mime.types"), msg);    return 1;}

⌨️ 快捷键说明

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