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

📄 example.c

📁 编译原理词法分析器实现五
💻 C
字号:
// exam.c : Defines the entry point for the console application.
#include <stdlib.h>
#include <stdio.h>
int linesCount=0;
int yaccVerbose=0;
int lexVerbose=0,j,k,l,typelenght,m;
extern int yyparse();

struct CShengming
{
	char m_name[30];
	char m_token[30];		//Array or Value
	char m_type[30];		//int, float, char
	int m_weishu;
	int m_xiangqing;
};

extern struct CShengming JiLu[100];

struct CArrayInfo
{
	char m_name[30];
	int m_lenth;
};

extern struct CArrayInfo Array[100];

extern int nTotalJiLu;
extern int nTotalArray;

void PrintAll();

int main(int argc, char* argv[])
{
	extern FILE *yyin;

	printf("Compiling...!\n");
	if((yyin=fopen("exprTest.txt","rt"))==NULL){
			perror("can not open file exprTest.txt\n") ;
			exit(1);
		}
	if (yyparse()){
		fprintf(stderr,"parser error\n");
		exit(1);
	}
	printf("yyparse() completed successfully!\n");
	PrintAll();
	return 0;
}

void PrintAll()
{
	int i;
	printf("\t编号\t变量名\t类别\t类型\t维数\t详情\n");
	for(i=0,j=1,m=1; i<nTotalJiLu; ++i)
	{
		//printf("\t%d\t%s\t%s\t%s\t%d\t%d\n", i, JiLu[i].m_name, JiLu[i].m_token, 
			//	JiLu[i].m_type, JiLu[i].m_weishu, JiLu[i].m_xiangqing);
		if(strcmp(JiLu[i].m_token,"Array")==0)
		{
			printf("\t%d\t%s\t%s\t%s\t%d\t数组指针%d\n", i, JiLu[i].m_name, JiLu[i].m_token, 
				JiLu[i].m_type, JiLu[i].m_weishu, j);
			//printf("\t数组指针%d\n",j);
			j++;
		}
		else
		{
			printf("\t%d\t%s\t%s\t%s\t%d\t变量%d\n", i, JiLu[i].m_name, JiLu[i].m_token, 
				JiLu[i].m_type, JiLu[i].m_weishu, m);
			m++;
		}

	}
	printf("\n\t详情\n");
	printf("\t数组指针\t首地址\t总长度\tsizeof\n");
	for(i=0,j=1,l=0; i<nTotalJiLu; ++i)
	{
		if(strcmp(JiLu[i].m_token,"Array")==0)
		{
			for(k=1;k<JiLu[i].m_weishu;k++)
				Array[l].m_lenth=Array[l].m_lenth+Array[l+k].m_lenth;
			if(strcmp(JiLu[i].m_type,"char")==0)
				typelenght=sizeof(char);
			else
				if(strcmp(JiLu[i].m_type,"int")==0)
					typelenght=sizeof(int);
				else
					if(strcmp(JiLu[i].m_type,"float")==0)
						typelenght=sizeof(float);
					else 
						typelenght=0;

			printf("\t%d\t\t%s\t%d\t%d\n", j, Array[l].m_name, Array[l].m_lenth,typelenght);
			j++;
			l=l+k;
		}
	}
}

⌨️ 快捷键说明

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