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

📄 exp_1.cpp

📁 1、给出各单词符号的类别编码。 2、词法分析程序应能发现输入串中的错误。 3、词法分析作为单独一遍编写
💻 CPP
字号:
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <iostream.h>
#include <fstream.h>
#include"search.h"
extern int reserve(char*);
extern void output(int,char*);
char token[20];
char ch;
int i,c;



void scanner(FILE *fp)
{
	ch=fgetc(fp);
	if(isalpha(ch))
	{
		token[0]=ch;
		i=1;
		ch=fgetc(fp);
		while(isalpha(ch)||isalnum(ch))
		{
			token[i]=ch;
			i++;
			ch=fgetc(fp);
		}
		fseek(fp,-1,1);
		token[i]='\0';
		c=reserve(token);
		if(c!=-1)
		{	
			/*if(c<5)//检查保留字的正确性
			{
				for(int i=0;i<20;i++)
				{
					if(checkKey[i]==0)
						checkKey[i]=c;
					break;
				}
			}*/
			switch(c)
			{
			case 1:checkBegin++;break;
			case 2:checkEnd++;break;
			case 3:checkIf++;break;
			case 4:checkThen++;break;
			default:break;
			}
			//output(c,token);
			output(c," ");
		}
		else
			output(19,token);
	}
	else if(isdigit(ch))
	{
		token[0]=ch;
		ch=fgetc(fp);
		i=1;
		while(isdigit(ch))
		{
			token[i]=ch;
			i++;
			ch=fgetc(fp);
		}
		token[i]='\0';
		fseek(fp,-1,1);
		output(18,token);
	}
	else
	switch(ch)
	{
		case'=':output(21," ");break;
		case'+':output(22," ");break;
		case'-':output(23," ");break;
		case'*':output(24," ");break;
		case'/':output(25," ");ch=fgetc(fp);
			if(ch=='*')
			output(26," ");
			else
			{
			fseek(fp,-1,1);
			output(27," ");
			}
			break;
		case'(':output(28," ");checkL++;break;
		case')':output(29," ");checkR++;break;
		case';':output(30," ");break;
		case':':ch=fgetc(fp);
			if(ch=='=')
				output(32," ");
			else
			{
				fseek(fp,-1,1);
				output(33," ");
			}
			break;
		case'>':ch=fgetc(fp);
			if(ch=='=')
				output(34," ");
			else
			{
				fseek(fp,-1,1);
				output(35," ");
			}
			break;
		case'<':ch=fgetc(fp);
			if(ch=='=')
				output(36," ");
			else if(ch=='>')
				output(37," ");
			else
			{
				fseek(fp,-1,1);
				output(38," ");
			}
			break;
		//default:printf("ERROR in wrongSign");
	}
}



void main()
{
	FILE *fp;
	//FILE *fp2;
	char wenjian[30];
	printf("请输入文件名:\n");
	scanf("%s",&wenjian);
	//scanf("%s",&wenjian2);
	fp=fopen(wenjian,"r");
	//fp2=ffp=fopen(wenjian2,"w");
	while(!feof(fp))
	{
		scanner(fp);
	}
	checkEqual(checkBegin,checkEnd,'B');
	checkEqual(checkIf,checkThen,'I');
	checkEqual(checkL,checkR,'L');
}

⌨️ 快捷键说明

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