📄 nepc.l.c
字号:
%{#include "nepc.tab.h"#include "nepc.h" static int input();%}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}+ other [-()<>=+*.;%]letter [a-zA-Z]variable {letter}({letter}|{digit})* %x ASTRING%% char *s, *v; char tmpstr[MAX_STRLEN];\" { BEGIN ASTRING; s = tmpstr; }<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>. { *s++ = *yytext; }"int" return TYPE_INT;"float" return TYPE_FLOAT;"double" return TYPE_DOUBLE;"long" return TYPE_LONG;"string" return TYPE_STRING;"struct" return TYPE_STRUCT;"while" return WHILE;"for" return FOR;"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;"/*" { comment(); }"//" { comment2(); }{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]+ { } ; /* ignore whitespace */"\n" {G_line++; }. yyerror("Unknown character");%%int yywrap(void) { return 1;}comment(){ char c, c1;loop: while ((c = input()) != '*' && c != 0) { putchar(c); if(c=='\n') { G_line++; } } if ((c1 = input()) != '/' && c != 0) { if(c1=='\n') { G_line++; } unput(c1); goto loop; } if (c != 0) { putchar(c1); if(c1=='\n') { G_line++; } }}comment2() { char c, c1; loop: while ((c = input()) != '\n' && c != 0) { putchar(c); } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -