📄 stack.c
字号:
#include<stdlib.h>#include "struct.h"float stack[2048];int valueError=0;int pointer =-1;void push(float node){ //printf("pushed: %f\n", node); if(pointer>254){ valueError=1; return; } pointer++; stack[pointer]=node; }float pop(){ if(pointer<0) { valueError=-1; return -10000; } //printf("poped: %f\n", stack[pointer]); pointer--; return stack[pointer+1];}void empty(){ pointer=-1;}void calcuExp(symnode * node){ float a, b; if(node==NULL) return; calcuExp(node->next); calcuExp(node->sibling); if(strcmp(node->name, "INT_V")==0) { //printf("\npushing %d\n",atoi(node->value)); push( atoi(node->value)); } if(strcmp(node->name, "CHAR_V")==0) { //printf("\npushing %d\n",atoi(node->value)); push( (int)(node->value[1])); } if(strcmp(node->name, "ID")==0){ valueError=2; push(1); } if(strcmp(node->name, "FLT_V")==0){ //printf(" pushed: %s\n ",node->value); valueError=3; push(atof(node->value)); } if(strcmp(node->name, "OP")==0){ if(strcmp(node->value, "+")==0){ b = pop(); a=pop(); push(a+b); } if(strcmp(node->value, "-")==0){ b = pop(); a=pop(); push(a-b); } if(strcmp(node->value, "*")==0){ b = pop(); a=pop(); //printf("\npoped a:%d, b:%d\n", a, b); push(a*b); } if(strcmp(node->value, "/")==0){ b = pop(); a=pop(); push(a/b); } if(strcmp(node->value, "%")==0){ b = pop(); a=pop(); push((int)a%(int)b); } }} int errorOccur(){ int status; status=valueError; valueError=0; pointer=0; return status;} float getConstant(symnode *node){ empty(); calcuExp(node); return pop();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -