資源簡介
編制一個讀單詞過程,源程序為一個文件,讀取該文件,識別出各個具有獨立意義的單詞,即基本保留字、標識符、常數、運算符、界符五大類。并依次輸出各個單詞的內部編碼及單詞符號自身值。
單詞的內部編碼如下:
1、保留字:if、int、for、while、do、return、break、continue;單詞種別碼為1;
2、標識符:除保留字外的以字母開頭,后跟字母、數字的字符序列;單詞種別碼為2;
3、常數為無符號整形數;單詞種別碼為3;
4、運算符包括:+、-、*、/、=;單詞種別碼為4;
5、分隔符包括:,、;、{、}、(、); 單詞種別碼為5。
例:
源程序文件內容如下:
main()
{
int a, b;
a = 10;
b = a + 20;
}
要求輸出如下:
(2,”main”)
(5,”(”)
(5,”)”)
(5,”{“}
(1,”int”)
(2,”a”)
(5,”,”)
(2,”b”)
(5,”;”)
(2,”a”)
(4,”=”)
(3,10)
(5,”;”)
(2,”b”)
(4,”=”)
(2,”a”)
(4,”+”)
(3,20)
(5,”;”)
(5,”)”)

代碼片段和文件信息
#include
#include
#include
#include
char?CH;
char?*key[]={“if““int““for““while““do““return““break““continue“};//保留字
char?*oper[]={“+““-““*““/““=“};//運算符?
char?*border[]={“““;““(““)““{““}“};//分隔符?
ifstream?fp(“a.txt“);
void?IfKey(char?A[])
{
int?iflag=1;
for(i=0;i<10;i++)
{
if(strcmp(key[i]A)==0)
{
cout<<“(1\““< flag=0;
break;
}?
}
if(flag)
cout<<“(2\““<}
void?PinShu()
{
int?p=0;
char?B[10];
while(CH<=‘9‘&&CH>=‘0‘)
{
B[p]=CH;
p++;
fp.get(CH);
}
B[p]=‘\0‘;
cout<<“(3\““<}
void?ZiFu()
{
int?i;
for(i=0;i<10;i++)
{
if(strcmp(oper[i]&CH)==0)
{cout<<“(4\““< else?if(strcmp(border[i]&CH)==0)
{cout<<“(5\““< }
}
int?main()
{
int?K;
char?A[10];
fp.get(CH);
while(!fp.eof())
{
while(CH==‘?‘||CH==‘\n‘)
fp.get(CH);
if(isalpha(CH))
{
K=0;
while(isalpha(CH)||isdigit(CH))
{
if(K<10)
{
A[K]=CH;
K++;
}
fp.get(CH);
}
A[K]=‘\0‘;
IfKey(A);
}
else?if(CH<=‘9‘&&CH>=‘0‘)
PinShu();
else?
{
ZiFu();
fp.get(CH);
}
}
return?0;
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????1316??2012-11-27?09:16??c.cpp
?????文件?????????53??2012-11-26?23:04??a.txt
-----------?---------??----------?-----??----
?????????????????1369????????????????????2
評論
共有 條評論