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

📄 lex_cis.l

📁 pcmcia source code
💻 L
字号:
/* Special state for handling include files */%x src%{/* * lex_cis.l 1.15 2001/08/24 12:21:41 * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License * at http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and * limitations under the License.  * * The initial developer of the original code is David A. Hinds * <dahinds@users.sourceforge.net>.  Portions created by David A. Hinds * are Copyright (C) 1999 David A. Hinds.  All Rights Reserved. * * Alternatively, the contents of this file may be used under the * terms of the GNU General Public License version 2 (the "GPL"), in * which case the provisions of the GPL are applicable instead of the * above.  If you wish to allow the use of your version of this file * only under the terms of the GPL and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and * other provisions required by the GPL.  If you do not delete the * provisions above, a recipient may use your version of this file * under either the MPL or the GPL. */#undef src#include <stdlib.h>#include <unistd.h>#include <string.h>#include <syslog.h>#define src 1#include <pcmcia/cs_types.h>#include <pcmcia/cistpl.h>#include "pack_cis.h"#include "yacc_cis.h"/* For assembling nice error messages */int current_lineno;static int lex_number(char *);static int lex_units(char *, int, int);static int lex_float(char *);static int lex_string(char *);%}int	[0-9]+hex	0x[0-9a-fA-F]+flt	[0-9]+\.[0-9]*str	\"([^"]|\\.)*\"%%\n		current_lineno++;[ \t]*		/* skip */ ;[ ]*[#;].*	/* skip */ ;funcid		return FUNCID;mfc		return MFC;manfid		return MANFID;vers_1		return VERS_1;checksum	return CHECKSUM;common_jedec	return CJEDEC;attr_jedec	return AJEDEC;dev_info	return DEV_INFO;attr_dev_info	return ATTR_DEV_INFO;no_info		return NO_INFO;NULL		return lex_number("0");ROM		return lex_number("1");EPROM		return lex_number("3");EEPROM		return lex_number("4");FLASH		return lex_number("5");SRAM		return lex_number("6");DRAM		return lex_number("7");fn_specific	return lex_number("13");config		return CONFIG;base		return BASE;mask		return MASK;last_index	return LAST_INDEX;\[post\]	return POST;\[rom\]		return ROM;cftable_entry	return CFTABLE;\[default\]	return DEFAULT;\[bvd\]		return BVD;\[wp\]		return WP;\[rdybsy\]	return RDYBSY;\[mwait\]	return MWAIT;\[audio\]	return AUDIO;\[readonly\]	return READONLY;\[pwrdown\]	return PWRDOWN;Vcc		return VCC;Vpp1		return VPP1;Vpp2		return VPP2;Vnom		return VNOM;Vmin		return VMIN;Vmax		return VMAX;Istatic		return ISTATIC;Iavg		return IAVG;Ipeak		return IPEAK;Idown		return IDOWN;io		return IO;memory		return MEM;\[8bit\]	return BIT8;\[16bit\]	return BIT16;\[lines		return LINES;\[range\]	return RANGE;irq		return IRQ_NO;\[level\]	return LEVEL;\[pulse\]	return PULSE;\[shared\]	return SHARED;timing		return TIMING;wait		return WAIT;ready		return READY;reserved	return RESERVED;multi_function	return lex_number("0");memory_card	return lex_number("1");serial_port	return lex_number("2");parallel_port	return lex_number("3");fixed_disk	return lex_number("4");video_adapter	return lex_number("5");network_adapter	return lex_number("6");aims_card	return lex_number("7");scsi_adapter	return lex_number("8");{int}		return lex_number(yytext);{hex}		return lex_number(yytext);{int}b		return lex_units(yytext, 1, SIZE);{int}kb		return lex_units(yytext, 1024, SIZE);{int}mb		return lex_units(yytext, 1024*1024, SIZE);{flt}s		return lex_units(yytext, 1000000000, TIME);{flt}ms		return lex_units(yytext, 1000000, TIME);{flt}us		return lex_units(yytext, 1000, TIME);{flt}ns		return lex_units(yytext, 1, TIME);{int}s		return lex_units(yytext, 1000000000, TIME);{int}ms		return lex_units(yytext, 1000000, TIME);{int}us		return lex_units(yytext, 1000, TIME);{int}ns		return lex_units(yytext, 1, TIME);{flt}V		return lex_units(yytext, 100000, VOLTAGE);{flt}mV		return lex_units(yytext, 100, VOLTAGE);{flt}uV		return lex_units(yytext, 0.1, VOLTAGE);{int}V		return lex_units(yytext, 100000, VOLTAGE);{int}mV		return lex_units(yytext, 100, VOLTAGE);{int}uV		return lex_units(yytext, 0.1, VOLTAGE);{flt}A		return lex_units(yytext, 10000000, CURRENT);{flt}mA		return lex_units(yytext, 10000, CURRENT);{flt}uA		return lex_units(yytext, 10, CURRENT);{int}A		return lex_units(yytext, 10000000, CURRENT);{int}mA		return lex_units(yytext, 10000, CURRENT);{int}uA		return lex_units(yytext, 10, CURRENT);{flt}		return lex_float(yytext);{str}		return lex_string(yytext);.		return yytext[0];%%#ifndef yywrapint yywrap() { return 1; }#endif/*======================================================================    Stuff to parse basic data types======================================================================*/static int lex_number(char *s){    yylval.num = strtoul(s, NULL, 0);    return NUMBER;}static int lex_float(char *s){    yylval.flt = strtod(s, NULL);    return FLOAT;}static int lex_units(char *s, int scale, int token){    float f;    sscanf(s, "%f", &f);    yylval.num = scale*f + 0.5;    return token;}static int lex_string(char *s){    int n = strlen(s);    yylval.str = malloc(n-1);    strncpy(yylval.str, s+1, n-2);    yylval.str[n-2] = '\0';    return STRING;}/*======================================================================    The main parser entry point======================================================================*/void parse_cis(FILE *f){    current_lineno = 1;    yyrestart(f);    yyparse();    fclose(f);}

⌨️ 快捷键说明

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