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

📄 scanword.cpp

📁 一个简单得词法分析器
💻 CPP
字号:
#include "ScanWord.h"
#include "PreInput.h"
#include "ShareData.h"
#include "Display.h"
#include <iostream>
#include <string>
using namespace std;

void CScanWord::Sword()
{
    
	i=0;
	CPreInput input;  
    input.OpenSource();  //打开文件
	fileline = input.ReadFile();//读取一行
    while (fileline[0]!='#')
	{
        
		while (fileline[i]!=';')
		{
			i = InWord();//读单词函数
		}
		i=0;
        fileline = input.ReadFile();
	}


}



int CScanWord::InWord()
{
    CDisplay display;
	twoyuan lettermod;
	letter = fileline[i];
	    if ((letter > 96 && letter < 123)||(letter > 64 && letter < 91)) //字符为字母
		    type = 1;
	    else if (letter > 47 && letter < 58)//字符为数字
		    type = 2;
		else if ((letter > 39 && letter < 48) || (letter > 57 && letter < 63))//字符为运算符或逻辑符
			type = 3;
		else 
			type = 4;
	switch (type)
		{
	        case 1:
		             while ((fileline[i]!=';' && fileline[i]!=' ') && ((fileline[i] > 96 && fileline[i] < 123)||(fileline[i] > 64 && fileline[i] < 91)) || (fileline[i] > 47 && fileline[i] < 58))
					 {
                         
						 letter = fileline[i];
						 //cout << letter; 
                         lettermod.str = lettermod.str+letter;
						 i++;
						   
					 }
					 //cout << lettermod.str;
					 while(fileline[i]==' ')
						 i++;
					 if (lettermod.str==lettertable[0].str)
					 {
						 lettermod.code = 1;
						 display.Display(lettermod.str,lettermod.code);
					 }
					 else if (lettermod.str==lettertable[1].str)
					 {
						 lettermod.code = 2;
						 display.Display(lettermod.str,lettermod.code);
					 }
					 else if (lettermod.str==lettertable[2].str)
					 {
						 lettermod.code = 3;
						 display.Display(lettermod.str,lettermod.code);
					 }
					 else if (lettermod.str==lettertable[3].str)
					 {
						 lettermod.code = 4;
						 display.Display(lettermod.str,lettermod.code);
					 }
					 else if (lettermod.str==lettertable[4].str)
					 {
						 lettermod.code = 5;
						 display.Display(lettermod.str,lettermod.code);
					 }
					 else if (lettermod.str==lettertable[5].str)
					 {
						 lettermod.code = 6;
						 display.Display(lettermod.str,lettermod.code);
					 }
					 else if (lettermod.str==lettertable[6].str)
					 {
						 lettermod.code = 7;
						 display.Display(lettermod.str,lettermod.code);
					 }
					 else if (lettermod.str==lettertable[7].str)
					 {
						 lettermod.code = 8;
						 display.Display(lettermod.str,lettermod.code);
					 }
					 else if (lettermod.str==lettertable[8].str)
					 {
						 lettermod.code = 9;
						 display.Display(lettermod.str,lettermod.code);
					 }
					 else if (lettermod.str==lettertable[9].str)
					 {
						 lettermod.code = 10;
						 display.Display(lettermod.str,lettermod.code);
					 }
					 else if (lettermod.str==lettertable[10].str)
					 {
						 lettermod.code = 11;
						 display.Display(lettermod.str,lettermod.code);
					 }
					 else if (lettermod.str==lettertable[11].str)
					 {
						 lettermod.code = 12;
						 display.Display(lettermod.str,lettermod.code);
					 }
					 else if (lettermod.str==lettertable[12].str)
					 {
						 lettermod.code = 13;
						 display.Display(lettermod.str,lettermod.code);
					 }
					 else if (lettermod.str==lettertable[13].str)
					 {
						 lettermod.code = 14;
						 display.Display(lettermod.str,lettermod.code);
					 }
					 else if (lettermod.str==lettertable[14].str)
					 {
						 lettermod.code = 15;
						 display.Display(lettermod.str,lettermod.code);
					 }
					 else if (lettermod.str==lettertable[15].str)
					 {
						 lettermod.code = 16;
						 display.Display(lettermod.str,lettermod.code);
					 }
					 else 
					 {
						 lettermod.code = 17;
                         display.Display(lettermod.str,lettermod.code);
					 }
					 cout << "\n";
		             break;
	        
			case 2:
					 lettermod.code = 18;
				     while (fileline[i]!=';' && (fileline[i] > 47 && fileline[i] < 58))
					 {
						 letter = fileline[i];
						 //cout << letter;
						 lettermod.str = lettermod.str+letter;
						 i++;
						 
					 }
					 while(fileline[i]==' ')
						 i++;
					 display.Display(lettermod.str,lettermod.code);
					 cout << "\n";
					 break;
	        
			case 3:
				     if (lettertable[18].word==fileline[i])   //+
					 {
						 lettermod.code = 19;
						 lettermod.str = lettertable[18].word;
						 i++;
					 }
				     else if(lettertable[19].word==fileline[i])    //-
					 {
						 lettermod.code = 20; 
						 lettermod.str = lettertable[19].word;
						 i++;

					 }
					 else if (lettertable[20].word==fileline[i])   //*
					 {
						 lettermod.code = 21;
						 lettermod.str = lettertable[20].word;
						 i++;
						 
					 }
					 else if (lettertable[21].word==fileline[i])   // /
					 {
						 if (fileline[i+1]=='n')
						 {
							 lettermod.code = 35;
							 lettermod.str = lettertable[21].word;
                             lettermod.str = lettermod.str+"n";							 
						     i = i+2;

						 }
						 lettermod.code = 22;
						 lettermod.str = lettertable[21].word;
						 i++;
					 }
					 else if (lettertable[22].word==fileline[i])   //:=
					 {
						 if (lettertable[23].word==fileline[i+1])
						 {
							 lettermod.code = 23;
							 lettermod.str = lettertable[22].word;
                             lettermod.str = lettermod.str+lettertable[23].word;
							 i = i+2;

						 }
						 else
						 { 
							 i++;
							 cout << "error";
						 }

					 }
					 else if (lettertable[23].word==fileline[i]) //=
					 {
						 lettermod.code = 24;
						 lettermod.str = lettertable[23].word;
						 i++;
					 }
					 else if (lettertable[25].word==fileline[i])//<,<=,<>
					 {
						 if (lettertable[24].word==fileline[i+1])
						 {
							 lettermod.code = 25;
							 lettermod.str = lettertable[25].word;
                             lettermod.str = lettermod.str+lettertable[24].word;
							 i = i+2;

						 }
						 else if (lettertable[23].word==fileline[i+1])
						 {
							 lettermod.code = 29;
							 lettermod.str = lettertable[25].word;
                             lettermod.str = lettermod.str+lettertable[23].word;
							 i = i+2;

						 }
						 else
						 { 
							 lettermod.code = 28;
							 lettermod.str = lettertable[25].word;
							 i++;
						 }

					 }
					 else if (lettertable[24].word==fileline[i])//>=,>
					 {
						 if (lettertable[23].word==fileline[i+1])
						 {
							 lettermod.code = 27;
							 lettermod.str = lettertable[24].word;
                             lettermod.str = lettermod.str+lettertable[23].word;
							 i = i+2;

						 }
						 else
						 {
							 lettermod.code = 26;
							 lettermod.str = lettertable[24].word;
							 i++;
						 }

					 }
					 else if (lettertable[26].word==fileline[i]) //(
					 {
						     lettermod.code = 30;
							 lettermod.str = lettertable[26].word;
							 i++;
					 }
					 else if (lettertable[27].word==fileline[i]) //)
					 {
						     lettermod.code = 31;
							 lettermod.str = lettertable[27].word;
							 i++;
					 }
					 else if (lettertable[28].word==fileline[i])//,
					 {
						     lettermod.code = 32;
							 lettermod.str = lettertable[28].word;
							 i++;
					 }
					 else if (lettertable[30].word==fileline[i])//.
					 {
						     lettermod.code = 34;
							 lettermod.str = lettertable[30].word;
							 i++;
					 }
				     while(fileline[i]==' ')
						 i++;
					 
					 display.Display(lettermod.str,lettermod.code);
					 cout << "\n";
					 break;
			default:
		             if (fileline[i]==' '|| fileline[i]=='	')
					 {
						 while(fileline[i]==' '|| fileline[i]=='	')
							 i++;
					 }
					 else
					 {
						 cout << "非法字符!\n";
						 i++;
					 }
		}  
	
	return i;
}

⌨️ 快捷键说明

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