用C语言编写识别标识符的词法分析器,以文本文件为输入,控制台(或文件)输出识别出的每个标识符。
思路:
需要6个数组:
1. 存储关键字 key[6]
2. 存储对应下标关键字的种别码 keyNum[6]
3. 存储运算符和界符 symbol[17]
4. 存储运算符对应下标的种别码 symbolNum[17]
5. 存储从文件中取出的每个字符(不包括括号)letter[1000]
主要函数TakeWord()(将文件letter[]中每个字符进行提取,找出关键字,输出种别码)思路:
主要代码:
void TakeWord(){ //取单词
int k;
for(num=0;num<length;){
string str1,str;
str=letter[num];
k=typeword(str);
switch(k){
case 1:
{
str1=identifier(str,num);
if(isKeyWord(str1))
print(str1,isKeyWord(str1));
else
print(str1,0);
break;
}
case 2:
{
str1=Number(str,num);
print(str1,24);
break;
}
case 3:
{
str1=symbolStr(str,num);
print(str1,isSymbol(str1));
break;
}
}
}
}
int main(){
char w;
int i,j;
freopen("start.txt","r",stdin);
freopen("result.txt","w",stdout); //从控制台输出
length=0;
while(cin>>w){
if(w!=' '){
letter[length]=w;
length++;
} //去掉程序中的空格
}
TakeWord();
fclose(stdin);//关闭文件
fclose(stdout);//关闭文件
return 0;
}
string identifier(string s,int n){//标识符的连接
int j=n+1;
int flag=1;
while(flag){
if(isNum(letter[j]) || isLetter(letter[j])){
s=(s+letter[j]).c_str();
if(isKeyWord(s)){
j++;
num=j;
return s;
}
j++;
}
else{
flag=0;
}
}
num=j;
return s;
}