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

📄 nepc.y.bak

📁 一个小计算器的实现(编译原理),用Lex和bison
💻 BAK
字号:
%{#include <stdlib.h>#include <stdio.h>#include <assert.h>#include "nepc.h"%}%union{int iValue;double fValue;char *pStr;long *nPtr;int type_int;float type_float;double type_double;long type_long;};%token <type_int> TYPE_INT%token <type_float> TYPE_FLOAT%token <type_double> TYPE_DOUBLE%token <type_long> TYPE_LONG%token <pStr> TYPE_STRING%token <iValue> TYPE_STRUCT%token <iValue> INTEGER%token <fValue> FLOAT%token <pStr> VARIABLE  %token <pStr> STRING%token <iValue> ACOS ASIN ATAN CEIL COS COSH EXP FABS FLOOR %token <iValue> LOG LOG10 POW10 SIN SINH SQRT TAN TANH%type <nPtr> stmt expr  /*function*/%token EXIT ERASE CLEAR LIST HELP DEC HEX OCT%token WHILE IF PRINT FOR%nonassoc IFX%nonassoc ELSE%left OR%left AND%left GE LE EQ NE '>' '<'%left '+' '-'%left '*' '/' '%'%left PP SS%nonassoc UMINUS%%program:    init parsed EXIT        {  }  ;init: /* NULL*/             {  printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>begin !");}   ;parsed:    parsed stmt             {				sentenceArray[sentenceArrayLen]=$2;                                sentenceArrayLen++;				 			    } /* | parsed error separator  { yyerrok; WAITINPUT;} comment by chenbp*/  | /* NULL */  ;stmt:    separator               { $$ = opr(';', 2, NULL, NULL);  }  | PRINT expr separator    { $$ = opr(PRINT, 1, $2); }  | VARIABLE '=' expr separator     {				if(NULL==var($1,G_level,G_line))					{						YYABORT;					}				$$ = (($3 == NULL)?NULL:(opr('=', 2, var($1,G_level,G_line), $3)));					    printf("level:%d\n",G_level);				    }  | type_define  VARIABLE '=' expr separator  				{					if($4 == NULL)					{						$$=NULL;						printf("null  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");					}					else					{						nodeType *p=opr('=', 2, var($2,G_level,G_line), $4);						if(p==NULL)						{							printf("null 22  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");						}						$$=p;						printf("install the vaiable level:%d\t line:%d\n",G_level,G_line);					}			        }type_define:	TYPE_INT	|TYPE_FLOAT	|TYPE_DOUBLE	|TYPE_LONG	|TYPE_STRING;separator:    ';'  ;expr:    INTEGER                 { $$ = con_int($1); }  | FLOAT                   { $$ = con_flt($1); }  | STRING                  { $$ = con_str($1); }  | VARIABLE                { $$ = var($1,G_level,G_line);if($$==NULL)YYABORT; }  | '-' expr %prec UMINUS   { $$ = opr(UMINUS, 1, $2); }  | expr '+' expr           { $$ = opr('+', 2, $1, $3); }  | expr '-' expr           { $$ = opr('-', 2, $1, $3); }  | expr '*' expr           { $$ = opr('*', 2, $1, $3); }  | expr '/' expr           { $$ = opr('/', 2, $1, $3); }  | expr '<' expr           { $$ = opr('<', 2, $1, $3); }  | expr '>' expr           { $$ = opr('>', 2, $1, $3); }  | expr '%' expr           { $$ = opr('%', 2, $1, $3); }  | expr AND expr           { $$ = opr(AND, 2, $1, $3); }  | expr OR expr            { $$ = opr(OR, 2, $1, $3); }  | expr GE expr            { $$ = opr(GE, 2, $1, $3); }  | expr LE expr            { $$ = opr(LE, 2, $1, $3); }  | expr NE expr            { $$ = opr(NE, 2, $1, $3); }  | expr EQ expr            { $$ = opr(EQ, 2, $1, $3); }  | '(' expr ')'            { $$ = $2; }%% 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -