?? lexer.l
字號:
/* * File: lexer.l * Author: Suman Banerjee <suman@cs.umd.edu> * Date: July 31, 2001 * Terms: GPL * * myns simulator */%{#include <agent.h>#include <constants.h>#include "parser-event.h"#include "parser.h"int yylineno = 1;bool set_comment = false;bool filename_in_progress = false;#define MAX_FILENAME 256int filename_length = 0;char filename [MAX_FILENAME];bool is_comment_or_filename (char *txt);extern int yyerror;%}AGENT "agent"AT "at"ATTACH "attach"BEACON "beacon"BSE "bse"BURSTSIZE "burstsize"COMMENT "#"CONSTANT "constant"COOP "coop"EDGE "edge"EXPONENTIAL "exponential"FINISH "finish"FILENAME_DELIMIT "'"GAP "gap"NODE "node"NODECOUNT "nodecount"ORACLE "oracle"PRINT "print"ROUTING "routing"SET "set"SOURCE "source"START "start"STOP "stop"SIMULATOR "simulator"MC "mc"QUERY "query"RP "rp"SEMICOLON ";"TS "ts"UNIFORM "uniform"NUMBER_INT ([0-9]+)NUMBER_FLOAT ([0-9]*\.[0-9]+)NAME [a-zA-Z_][-a-zA-Z0-9_.]*%%{COMMENT} { set_comment = true; }{FILENAME_DELIMIT} { if (! set_comment) { if (filename_in_progress) { filename_in_progress = false; memcpy((void*)yylval.strval,(void*)filename,filename_length); return TOK_FILENAME; } else { filename_length = 0; filename_in_progress = true; } }}{SEMICOLON} { if (! is_comment_or_filename(yytext)) return TOK_SEMICOLON;}{NODE} { if ( ! is_comment_or_filename(yytext)) return TOK_NODE; }{ATTACH} { if (! is_comment_or_filename(yytext)) return TOK_ATTACH; }{AGENT} { if (! is_comment_or_filename(yytext)) return TOK_AGENT; }{RP} { if (! is_comment_or_filename(yytext)) return TOK_RP; }{MC} { if (! is_comment_or_filename(yytext)) return TOK_MC; }{BSE} { if (! is_comment_or_filename(yytext)) return TOK_BSE; }{BEACON} { if (! is_comment_or_filename(yytext)) return TOK_BEACON; }{QUERY} { if (! is_comment_or_filename(yytext)) return TOK_QUERY; }{CONSTANT} { if (! is_comment_or_filename(yytext)) return TOK_CONSTANT; }{UNIFORM} { if (! is_comment_or_filename(yytext)) return TOK_UNIFORM; }{EXPONENTIAL} { if (! is_comment_or_filename(yytext)) return TOK_EXPONENTIAL; }{BURSTSIZE} { if (! is_comment_or_filename(yytext)) return TOK_BURSTSIZE; }{COOP} { if (! is_comment_or_filename(yytext)) return TOK_COOP; }{EDGE} { if (! is_comment_or_filename(yytext)) return TOK_EDGE; }{GAP} { if (! is_comment_or_filename(yytext)) return TOK_GAP; }{SET} {if (! is_comment_or_filename(yytext)) return TOK_SET; }{START} {if (! is_comment_or_filename(yytext)) return TOK_START; }{STOP} {if (! is_comment_or_filename(yytext)) return TOK_STOP; }{SOURCE} {if (! is_comment_or_filename(yytext)) return TOK_SOURCE; }{FINISH} {if (! is_comment_or_filename(yytext)) return TOK_FINISH; }{PRINT} {if (! is_comment_or_filename(yytext)) return TOK_PRINT; }{SIMULATOR} {if (! is_comment_or_filename(yytext)) return TOK_SIMULATOR; }{NODECOUNT} {if (! is_comment_or_filename(yytext)) return TOK_NODECOUNT; }{AT} {if (! is_comment_or_filename(yytext)) return TOK_AT; }{ROUTING} {if (! is_comment_or_filename(yytext)) return TOK_ROUTING; }{ORACLE} {if (! is_comment_or_filename(yytext)) return TOK_ORACLE; }{TS} {if (! is_comment_or_filename(yytext)) return TOK_TS; }{NUMBER_INT} { if (! is_comment_or_filename(yytext)) { yylval.ival = atoi(yytext); return TOK_NUMBER_INT; } }{NUMBER_FLOAT} { if (! is_comment_or_filename(yytext)) { yylval.dval = atof(yytext); return TOK_NUMBER_FLOAT; } }{NAME} { if (! is_comment_or_filename(yytext)) { strcpy(yylval.strval,yytext); return TOK_NAME; } }[ \t]+ {};[\n] { yylineno ++; set_comment = false; if (filename_in_progress) { printf ("[Line %d] Missing filename end-quote\n", yylineno); exit(-1); }}. {if (! is_comment_or_filename(yytext)) return TOK_JUNK; }%%bool is_comment_or_filename (char * txt) { if (set_comment == true) return true; if (filename_in_progress) { int new_filename_length = filename_length + strlen(txt); if (new_filename_length > MAX_FILENAME) { printf ("[Line %d] filename too long\n", yylineno); exit(-1); } strcpy(&(filename[filename_length]),txt); filename_length = new_filename_length; return true; } return false;}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -