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

📄 getword.h

📁 一个简单的词法分析程序。是编译原理的部分课程设计。因为时间有限。未能完成全部。如果有朋友改了代码或添加了功能使代码更加完善。请与我联系:ningmeng_studio@163.com谢谢. 做的不是
💻 H
字号:
/*=============================================
**             2005-8-24					**
**			   获得单词						**
**			 lizhu zhang					**
=============================================*/
/*=============================================
**函数用能: 从一行文件中获得一个单词
**参数说明:[in]pString:接受传入的字符串
**		   [out]col   :对列进行计数
**		   [out]pWord "返回查到的单词
**返回值  :无
**===========================================*/
void FGetWord(const char *pString,int &col,char *pWord)
{
	char word[2048];
	char newWord[2048];
	char tmpWord[2];
	strcpy(word,pString);
	int i = col;
	int j = 0;
	int iCount = i;
	int jieXian = 1;
	//做为识别'的标志
	int flag = 0;
	//忽略开始时候源程序中的空格
	while(word[i]==' ' && word[i]!='\0')
		i++;
	iCount = i;
	//如果开始即为一行的结束则为空行
	if(word[i]=='\0')
	{
		col = i;
		return;
	}
	else//该行不为空行
	{
		while(word[i]!=' ' && word[i]!='\0')
		{
			tmpWord[0] = word[i];
			tmpWord[1] = '\0';

			if(FJieXianFu(tmpWord))
			{
				
				//第一个字符就是界限符
				if(i == iCount)
				{
					//jieXian = 0;				
					//将单个的字母连接成单词
					newWord[j] = word[i];
					//看i+1位,是否为双界限符
					i ++;
					j ++;
					if(word[i]=='\0')
						break;
					//=======================
				    tmpWord[0] = word[i];
		        	tmpWord[1] = '\0';
					//=======================
					//是双界限符
					if(FJieXianFu(tmpWord))
					{
						newWord[j] = word[i];
						//==================
						j ++;
						//退出循环
						break;
					}
					else
					{
						//获得实常数
						if(word[i]>='0' && word[i]<='9'&&(word[i-1] =='-'||word[i-1]=='+'))
						{
							while((word[i]>='0' && word[i]<='9')|| word[i] =='-'||word[i]=='+' || word[i] == 'e' ||word[i] == '.')
							{
								newWord[j] = word[i];
								i++;
								j++;
							}

							continue;
						}
						else
							if(word[i]=='\'')
							{
								if(flag == 0)
								{
									newWord[j] = word[i];
									i++;
									j++;
									flag = 1;
									continue;
								}
								else
								{
									flag = 0;
									newWord[j] = word[i];
									break;
								}

								continue;
							}
							i -= 1;
						break;
					}

				}
				else//不是第一位则返回前面的部分
				{
					i -= 1;
					break;
				}
			}
			else
			{
				//
				if(word[i] == '!')
				{
					if(i != iCount)
					{
						i -= 1;
						break;
					}
					else
					{
						if(word[i] == '!')
						{
							char tempChar;
							tempChar = tmpWord[0];
							tmpWord[0] = word[i+1];
							if(FJieXianFu(tmpWord))
							{
								newWord[j] = '!';
								newWord[j+1] = tmpWord[0];
								j += 2;
								i += 1;
								break;
							}
							else
								tmpWord[0] = tempChar;
						}
					}
				}
				else
				{
					//将单个的字母连接成单词
					newWord[j] = word[i];
					j++;
					//列加一
					i++;
				}
			}
		}
		col = i;
		newWord[j] = '\0';
		strcpy(pWord,newWord);
	//	cout<<"pWord:"<<pWord<<endl;
	}
}

⌨️ 快捷键说明

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