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

📄 scan_isa.l

📁 這是一個arm模擬器 以C++實做 主要模擬ARM9架構
💻 L
字号:
/*************************************************************************    Copyright (C) 2002 - 2007 Wei Qin    See file COPYING for more information.    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 2 of the License, 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.*************************************************************************/%{#include <fstream>#include "issgen.hpp"using namespace issgen;using std::ifstream;using std::string;#define YYLTYPE issgen::yyltype_t#include "parse_isa.hpp"#define YY_NO_UNPUTisa_prog *isa_parser_result;extern int isa_parse();const char *isa_filename;isa_FlexLexer *isa_lexer;static void isa_lexerror(char c) {	fprintf(stderr, "Unknown character %c at line %d\n",		c, isa_lexer->lineno());}%}%option c++%option yylineno%option noyywrapBINPAT  [01-]+DECNUM  [0-9]+EXP     [Ee][+-]?{DIG}+STR		\"(\\.|[^\\"])*\"WHITES  [ \t]*IDENT   [a-zA-Z_][a-zA-Z_0-9]*%x opdec%x comment%x mcomment%%{STR}		{			isa_lval.strval = strdup(YYText()+1);			isa_lval.strval[YYLeng()-2]=0;			return TK_STR;			}"group"		return TK_GRP;"op"		BEGIN(opdec); return TK_OP;<opdec>{IDENT}	{			isa_lval.sym_t = symbol_find_or_insert(YYText());			return TK_IDENT;			}<opdec>":"	return ':';<opdec>"("	return '(';<opdec>")"	BEGIN(INITIAL); return ')';<opdec>{BINPAT} {			isa_lval.strval = strdup(YYText());			return TK_PAT;			}<opdec>{WHITES}	<opdec>"\n"+		"var"		return TK_VAR;"field"		return TK_FIELD;{IDENT}		isa_lval.sym_t = symbol_find_or_insert(YYText()); return TK_IDENT;{DECNUM}    isa_lval.uint = atoi(YYText()); return TK_NUM;"//"			BEGIN(comment);<comment>"\n"	BEGIN(INITIAL);<comment>.		/*ignore*/"/*"			BEGIN(mcomment);<mcomment>"*/"	BEGIN(INITIAL);<mcomment>.		/*ignore*/"{"		return '{';"}"		return '}';":"		return ':';"="		return '=';";"		return ';';{WHITES}	"\n"+		<<EOF>>		return 0;.			{			 isa_lexerror(*YYText());			}%%void isa_error (char *s){	fprintf(stderr, "%s near line %d\n", s, isa_lexer->lineno());	exit(1);}int isa_lex(){    return isa_lexer->yylex();                                    }isa_prog *isa_parse_wrapper(ifstream *infile, const char *fname){	isa_filename = fname;	isa_lexer = new isa_FlexLexer(infile);	isa_parse();	delete isa_lexer;	return isa_parser_result;}

⌨️ 快捷键说明

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