📄 lex_cis.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 + -