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

📄 词法分析.txt

📁 编译原理实习中
💻 TXT
字号:
#include <iostream.h>
#include <string.h>

char file[500];
char buf[50];
char * p[10] = {"if", "while", "for", "else", "void", "main", "int",
 "float", "double", "char"};


int isSeparator(char ch);
int isDigit(char ch);
int isLetter(char ch);

void main(int argc, char * argv[])
{
	char ch;
	int i = 1, t = 0;
	cout << "please input the program('@' to end):" << endl;
	
	file[0] = cin.get();
	while (ch != '@')
	{
		
		ch = cin.get();
		file[i++] = ch;
	};
	
	i = 0;
	ch = file[i++];
	while (ch != '@')
	{
		if(isSeparator(ch))
		{
			cout << "(5, \"" << ch << "\" )" << endl;
		}
		
		else if(ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '='
 || ch == '>' || ch == '<')
		{
			if (file[i] != '=')
			{
				cout << "(4, \"" << ch << "\" )" << endl;
			}
			else
			{
				buf[1] = ch;
				buf[2] = file[i];
				buf[3] = '\0';
				cout << "(4, \"" << ch << file[i] << "\" )" << endl;
				
				i += 1;
			}
		}
		
		
		
		else if(isLetter(ch) || ch == '_')
		{
			t = 0;
			buf[t++] = ch;
			while (isLetter(file[i]) || isDigit(file[i]))
			{
				buf[t++] = file[i++];
			}
			buf[t] = '\0';
			
			int flag = 0;
			for (int j = 0; j < 10; j++)
			{
				if(strcmp(buf, p[j]) == 0)
				{
					cout << "(1, \"";
					for (int j = 0; j < t; j++)
					{
						cout << buf[j];
					}
					cout << "\" )" << endl;
					flag = 1;
				}
			}
			
			if (flag == 0)
			{
				cout << "(2, \"";
				for (int j = 0; j < t; j++)
				{
					cout << buf[j];
				}
				cout << "\" )" << endl;
			}
			
			
		}
		else if (isDigit(ch))
		{
			if(!isDigit(ch))
			{
				cout << "(3, \"" << ch << "\" )" << endl;
			}
			else
			{
				t = 0;
				buf[t++] = ch;
				while (isDigit(file[i]))
				{
					buf[t++] = file[i++];
				}
				buf[t] = '\0';
				cout << "(3, \"";
				for (int j = 0; j < t; j++)
				{
					cout << buf[j];
				}
				cout << "\" )" << endl;
			}
		}
		
		
		
		ch = file[i++];
	}
}

int isSeparator(char ch)
{
	if (ch == ',' || ch == ';' || ch == '{' || ch == '}' || ch == '(' ||
 ch == ')')
	{
		return 1;
	}
	else
		return 0;
}

int isDigit(char ch)
{
	if (ch <= '9' && ch >= '0')
	{
		return 1;
	}
	else return 0;
}

int isLetter(char ch)
{
	if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
	{
		return 1;
	}
	else 
		return 0;
}

⌨️ 快捷键说明

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