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

📄 nepc.l.c

📁 一个小计算器的实现(编译原理),用Lex和bison
💻 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 + -