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

📄 nepc.l

📁 使用yacc和lex编写的cmm语言的词法分析和语法分析程序.
💻 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 + -