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

📄 a.cpp

📁 这个是编译原理的词法分析的实验报告!很不错
💻 CPP
字号:
#include "lexical_analyzer.h"
#include "init.h"




void init_filepointer(char *filename,FILE *&file,char *openmode);
void generate_output(to_parser &result, FILE *&write_file);
FILE *read_file;

void main()
{
	
	init();											//init the symbol table

	FILE *write_file;
	
	init_filepointer("input.txt",read_file,"r");	//init the two file pointers
	init_filepointer("output.txt",write_file,"w");
	
	to_parser result;
	while(1)
	{
		result=lexan(read_file);					//lexical analyzer
		generate_output(result,write_file);
			
	}
	



}





//usage:	init file pointer
void init_filepointer(char *filename,FILE *&file,char *openmode)
{
if ((file = fopen(filename,openmode)) == NULL)
    {
		fprintf(stderr, "Cannot open \n" );
		exit(1);
	}
	
}


void generate_output(to_parser &result, FILE *&write_file)
{

	

	switch(result.token)
		{
	case DONE:{	fclose(read_file);
				fclose(write_file);
				exit(0);
			  } break;
		case 5:
		case 4:
		case 2:
		case 3:
		case 6:
		case 1: {
			fprintf(write_file,"%s %s ",get_reserved(result.token),
											   result.attr);
											  	//print keywords
			fprintf(write_file,"%d %d \n", lineno,result.position);
			printf("%s %s " ,get_reserved(result.token),result.attr);
			printf("%d ",result.line_no);
			printf("%d\n",result.position);	//print keywords
				 }break;
		case OPERATOR:{
			fprintf(write_file,"OPERATOR %s ",result.attr);
			fprintf(write_file,"%d %d\n",result.line_no,result.position);
			printf("OPERATOR %s ",result.attr);
			printf("%d ",result.line_no);
			printf("%d\n",result.position);	//print keywords
			
	
					  }break;
		case DELIMITER:{
			fprintf(write_file,"DELIMITER %c ",result.attr);
			fprintf(write_file,"%d %d\n",result.line_no,result.position);
			printf("DELIMITER %c ",result.attr);
			printf("%d %d\n",lineno,result.position);
						}break;
		case NUM:	{
			fprintf(write_file,"NUM %ld ",result.attr);
			fprintf(write_file,"%d %d\n",lineno,result.position);	//写文件
			printf("NUM %ld ",result.attr);
			printf("%d %d\n",lineno,result.position);			//标准输出,
					}break;
		case ID:    {
			fprintf(write_file,"ID %s ",result.attr);
			fprintf(write_file,"%d %d\n",lineno,result.position);		//print id
			printf("ID %s ",result.attr);
			printf("%d %d\n",lineno,result.position);
					}break;
		}

}


⌨️ 快捷键说明

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