📄 nepc.l
字号:
%{#include "y.tab.h"#include "nepc.h"%}digit [0-9]xdigit [0-9a-fA-F]odigit [0-7]dec_int 0|[1-9]{digit}*dec_flt (0\.{digit}*)|([1-9]{digit}*\.{digit}*)oct_int 0{odigit}+hex_int 0(x|X){xdigit}+letter [a-zA-Z]variable {letter}({letter}|{digit})*%x ASTRING%% char *s, *v; char tmpstr[MAX_STRLEN];\" { BEGIN ASTRING; s = tmpstr; }<ASTRING>\\n { *s++ = '\n'; /* CARE BUFFER OVERFLOW HERE!!! */ }<ASTRING>\\t { *s++ = '\t'; /* CARE BUFFER OVERFLOW HERE!!! */ }<ASTRING>\\\" { *s++ = '\"'; /* CARE BUFFER OVERFLOW HERE!!! */ }<ASTRING>\" { *s = '\0'; BEGIN 0; yylval.pStr = tmpstr; return STRING; }<ASTRING>\n { printf("invalid string"); exit(1); }<ASTRING>. { *s++ = *yytext; }"while" return WHILE;"if" return IF;"else" return ELSE;"print" return PRINT;"exit" return EXIT;"quit" return EXIT;"erase" return ERASE;"clear" return CLEAR;"cls" return CLEAR;"ls" return LIST;"list" return LIST;"help" return HELP;"dec" return DEC;"hex" return HEX;"oct" return OCT;"acos" return ACOS;"asin" return ASIN;"atan" return ATAN;"ceil" return CEIL;"cos" return COS;"cosh" return COSH;"exp" return EXP;"fabs" return FABS;"floor" return FLOOR;"log" return LOG;"log10" return LOG10;"sin" return SIN;"sinh" return SINH;"sqrt" return SQRT;"tan" return TAN;"tanh" return TANH;{variable} { v=malloc(yyleng+1); strncpy(v, yytext, yyleng); v[yyleng]='\0'; yylval.pStr = v; return VARIABLE; }{dec_int} { yylval.iValue = STR_TO_INT(yytext); return INTEGER; }{dec_flt} { yylval.fValue = STR_TO_FLT(yytext); return FLOAT; }{oct_int} { int i=1; INT val=0; while(i<yyleng) { val=(val<<3)+yytext[i]-'0'; i++; } yylval.iValue=val; return INTEGER; }{hex_int} { int i=2; INT val=0; while(i<yyleng) { if(islower(yytext[i])) val=(val<<4)+yytext[i]-'a'+10; else if(isupper(yytext[i])) val=(val<<4)+yytext[i]-'A'+10; else val=(val<<4)+yytext[i]-'0'; i++; } yylval.iValue=val; return INTEGER; }[-()<>=+*/{}.;%] { return *yytext; }">=" return GE;"<=" return LE;"==" return EQ;"!=" return NE;"&&" return AND;"||" return OR;"++" return PP;"--" return SS;[ \t\n]+ ; /* ignore whitespace */. yyerror("Unknown character");%%int yywrap(void) { return 1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -