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

📄 stack.c

📁 一个编译器的例子,基于c语言,在linux下开发 现在了简单的c语言例子
💻 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 + -