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

📄 lexer.l

📁 nRF24E1 sample sensor node code
💻 L
字号:
/*  -*- c-basic-offset:4; tab-width:4; indent-tabs-mode:t -*- */%x incl%option noyywrap%{#define YY_NO_UNPUT#include "token.h"#define YY_DECL CToken* yylex()#define DEFAULT_ACTION 	if(CToken::Current()->type!=UNKNOWN) \							{ CToken::New(CTranslation::Current()); CToken::Current()->Push(yytext); return CToken::Current(); } \						else CToken::Current()->Push(yytext);%}intsuffix                               ([uU][lL]?)|([lL][uU]?)fracconst                               ([0-9]*\.[0-9]+)|([0-9]+\.)exppart                                 [eE][-+]?[0-9]+floatsuffix                             [fFlL]chartext                                ([^'])|(\\.)stringtext                              ([^"])|(\\.)%%#include[\t\f\v\r ]*\"             { BEGIN(incl); }<incl>[^ \t\n\r\"]+\"     {                             string filename = yytext;                            filename.erase(filename.size()-1,1);                            string pathname=CTranslation::Current()->filename;                            string::size_type pos = pathname.rfind ('/');                            if(pos==string::npos)                            	pathname="";                            else                            	pathname.erase(pos+1);                            filename = pathname + filename;                            CTranslation::Current()->include_stack = YY_CURRENT_BUFFER;                            CTranslation::New();                            CTranslation::Current()->filename = filename;                            if(g_debug)printf("include file '%s'\n",filename.c_str());							yyin = fopen( filename.c_str(), "r" );							if ( ! yyin )                            {                                CTranslation::Error(NULL, 1, "cannot open include file '%s'\n", filename.c_str());								return NULL;                            }                            else                            {							    yy_switch_to_buffer(yy_create_buffer( yyin, YY_BUF_SIZE ) );							    BEGIN(INITIAL);                                CTranslation::Current()->lineno = 1;                                CToken* t = CToken::New(CTranslation::Current());                                t -> line_info = true;                                return t;                            }                        }<incl>"\n"              { BEGIN(INITIAL); CToken::Current()->Push("\n"); }<<EOF>>                 {	                        if ( !CTranslation::Delete() )							{								yyterminate();								return NULL;							}							else							{								yy_delete_buffer( YY_CURRENT_BUFFER );								yy_switch_to_buffer( (YY_BUFFER_STATE)CTranslation::Current()->include_stack);                                CToken* t = CToken::New(CTranslation::Current());                                t -> line_info = true;                                return t;							}                        }"#"					    {                               CToken* t = CToken::New(CTranslation::Current());                            int c1, c2;	                        c1 = 0;	                        c2 = yyinput();							t->Push('#');                            while (c2 != '\n' || c1 == '\\' )                            {							    t->Push(c2);								if (c2 == '\n')CTranslation::Current()->lineno++;                          		c1 = c2;                         		c2 = yyinput();							}							if (c2 == '\n')CTranslation::Current()->lineno++; 							t->Push(c2);							return t;                        }"\n"					{                             CToken::Current()->Push("\n");                             CTranslation::Current()->lineno++;                         }"\r"					{}[\t\f\v ]+				{                             CToken::Current()->Push(yytext);                        }"#cxxdef"				{							string text = "#define";							string id,id1,id2;							int state=0;							int c;							c = yyinput();							while(c!='\n')							{								text += c;								switch(state)								{								case 0:								case 2:									if(c=='_'||isalpha(c))									{										state++;										id+=c;									}									else if(!isspace(c))									{										state=5;									}									break;								case 1:								case 3:									if(c=='_'||isalnum(c))									{										id+=c;									}									else if (isspace(c))									{										if(state==1)											id1=id;										else											id2=id;										state++;										id="";									}									else									{										state=5;									}									break;								case 4:									if(!isspace(c))										state=5;									break;								default:									break;								}								c = yyinput();							}							if(state==3)							{								id2=id;								state++;							}							text += c;                            CTranslation::Current()->lineno++; 							if(state==4)							{                            	std::map<string, string>::iterator iter=g_macros.find(id1);                            	if(iter==g_macros.end())                            	    g_macros[id1]=id2;							}							else							{								if(CToken::Current()->type!=UNKNOWN) 								{									CToken::New(CTranslation::Current()); 									CToken::Current()->Push(text.c_str());									return CToken::Current(); 								}								else 									CToken::Current()->Push(yytext);							}						}"/*"					{                               int c1, c2;	                        c1 = yyinput();	                        c2 = yyinput();                            while (c2 != EOF && !(c1 == '*' && c2 == '/'))                            {                                if (c1 == '\n')                                {                                    CToken::Current()->Push("\n");                                     CTranslation::Current()->lineno++;                                 }                            		c1 = c2;                         		c2 = yyinput();							}	                    }"//"					{                               int c;                            while ((c = yyinput()) != EOF && c != '\n');                            CToken::Current()->Push("\n");                             CTranslation::Current()->lineno++;                         }"{"					    {  CToken* t = CToken::New( CTranslation::Current(), '{' ); t->Push("{"); return t; }"}"					    {  CToken* t = CToken::New( CTranslation::Current(), '}' ); t->Push("}"); return t; }"("					    {  CToken* t = CToken::New( CTranslation::Current(), '(' ); t->Push("("); return t; }")"					    {  CToken* t = CToken::New( CTranslation::Current(), ')' ); t->Push(")"); return t; }"["					    {  CToken* t = CToken::New( CTranslation::Current(), '[' ); t->Push("["); return t; }"]"					    {  CToken* t = CToken::New( CTranslation::Current(), ']' ); t->Push("]"); return t; }"<"					    {  CToken* t = CToken::New( CTranslation::Current(), '<' ); t->Push("<"); return t; }">"					    {  CToken* t = CToken::New( CTranslation::Current(), '>' ); t->Push(">"); return t; }";"					    {  CToken* t = CToken::New( CTranslation::Current(), ';' ); t->Push(";"); return t; }"."					    {  CToken* t = CToken::New( CTranslation::Current(), '.' ); t->Push("."); return t; }"~"                     {  CToken* t = CToken::New( CTranslation::Current(), '~' ); t->Push("~"); return t; }","                     {  CToken* t = CToken::New( CTranslation::Current(), ',' ); t->Push(","); return t; }":"					    {  CToken* t = CToken::New( CTranslation::Current(), ':' );     t->Push(":");       return t; }"[]"					{  CToken* t = CToken::New( CTranslation::Current(), ARRAY );     t->Push("[]");       return t; }"::"					{  CToken* t = CToken::New( CTranslation::Current(), SCOPE );     t->Push("::");       return t; }".*"					{  CToken* t = CToken::New( CTranslation::Current(), DOTSTAR );   t->Push(".*");       return t; }"->"					{  CToken* t = CToken::New( CTranslation::Current(), ARROW );     t->Push("->");       return t; }"->*"					{  CToken* t = CToken::New( CTranslation::Current(), ARROWSTAR ); t->Push("->*");      return t; }"outport"	 	        {  CToken* t = CToken::New( CTranslation::Current(), OUTPORT );   t->Push("outport");         return t; }"inport"				{  CToken* t = CToken::New( CTranslation::Current(), INPORT );    t->Push("inport");         return t; }"component"				{  CToken* t = CToken::New( CTranslation::Current(), COMPONENT ); t->Push("class");    return t; }"class"				    {  CToken* t = CToken::New( CTranslation::Current(), CLASS ); t->Push("class");    return t; }"typename"			    {  CToken* t = CToken::New( CTranslation::Current(), TYPENAME ); t->Push("typename");    return t; }"enum"				    {  CToken* t = CToken::New( CTranslation::Current(), CLASS ); t->Push("enum");    return t; }"struct"				{  CToken* t = CToken::New( CTranslation::Current(), CLASS ); t->Push("struct");    return t; }"connect"				{  CToken* t = CToken::New( CTranslation::Current(), CONNECT );   t->Push("connect");  return t; }"template"				{  CToken* t = CToken::New( CTranslation::Current(), TEMPLATE );  t->Push("template"); return t; }"virtual"				{  CToken* t = CToken::New( CTranslation::Current(), FSPECIFIER );  t->Push("virtual"); return t; }"inline"				{  CToken* t = CToken::New( CTranslation::Current(), FSPECIFIER );  t->Push("inline"); return t; }"explicit"				{  CToken* t = CToken::New( CTranslation::Current(), FSPECIFIER );  t->Push("explicit"); return t; }[a-zA-Z_][a-zA-Z_0-9]*	{                            CToken* t = CToken::New( CTranslation::Current(), VARID );                           	std::map<string, string>::iterator iter;							iter=g_macros.find(yytext);							if(iter!=g_macros.end())								t->Push( (*iter).second.c_str() );							else								t->Push(yytext);							return t;                        }"0"[xX][0-9a-fA-F]+{intsuffix}?         { DEFAULT_ACTION; }"0"[0-7]+{intsuffix}?                   { DEFAULT_ACTION; }[0-9]+{intsuffix}?                      { DEFAULT_ACTION; }{fracconst}{exppart}?{floatsuffix}?     { DEFAULT_ACTION; }[0-9]+{exppart}{floatsuffix}?           { DEFAULT_ACTION; }"'"{chartext}*"'"                       { DEFAULT_ACTION; }"L'"{chartext}*"'"                      { DEFAULT_ACTION; }"\""{stringtext}*"\""                   { DEFAULT_ACTION; }"L\""{stringtext}*"\""                  { DEFAULT_ACTION; }.			                            { DEFAULT_ACTION; }%%

⌨️ 快捷键说明

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