-
大小: 312KB文件類型: .rar金幣: 2下載: 1 次發(fā)布日期: 2021-08-31
- 語言: C/C++
- 標(biāo)簽:
資源簡(jiǎn)介
編譯原理第一個(gè)實(shí)驗(yàn),用C語言編寫的詞法分析器(附源文件)。輸入一串字符,可以識(shí)別出關(guān)鍵字、運(yùn)算符,標(biāo)識(shí)符等。

代碼片段和文件信息
#include
#include
#include
#include
#include
#define?letter(a)?str[a]>=‘A‘&&str[a]<=‘Z‘||str[a]>=‘a(chǎn)‘&&str[a]<=‘z‘
#define?digit(a)?str[a]>=‘0‘&&str[a]<=‘9‘
const?int?S=200;
void?main()
{
char?keyword[][5]={“DIM““IF““DO““STOP““END“};
char?str[S]id[50]s[25];
int?choicem=0n=0flag=0;
cout<<“請(qǐng)選擇?:\n1.從文件中讀取源程序\n2.通過鍵盤輸入源程序\n“;
cin>>choice;
while(choice!=1&&choice!=2)
{
cout<<“\t\t警告??!輸入不合法,重新新輸入!\n“;
cin>>choice;
}
if(choice==1)
{
ifstream?infile(“sourcefile.txt“);
if(!infile)
{
cout<<“打開失敗!“;
abort();
}
infile.getline(strS‘#‘);
infile.close();
}
else
{
cin.get();
cout<<“請(qǐng)輸入源程序,以“#”結(jié)束\n“;
cin.getline(strS‘#‘);
}
ofstream?outfile(“objectfile.txt“ios::out);
if(!outfile)
{
cout<<“打開失敗!“;
abort();
}
for(int?i=0;str[i];i++)
{
if(str[i]==‘?‘)?;
else?if(str[i]==‘\n‘)?;
else?if(letter(i))?
{
id[m++]=str[i++];
while(letter(i)||digit(i))
id[m++]=str[i++];
id[m]=‘\0‘;
i--;
for(int?l=0;l<5;l++)
if(!strcmp(idkeyword[l]))
{
cout<<“<$“<“< outfile<<“<$“<“< flag=1;
}
if(flag==0)
cout<<“<$ID“<“< outfile<<“<$ID“<“<
m=0;
flag=0;
}
else?if(digit(i))?
{
s[n++]=str[i++];
while(digit(i))
s[n++]=str[i++];
s[n]=‘\0‘;i--;
int?a=0c[78]w=n-1;?
char?*p;
for(p=s;*p;p++w--)
a=a+(int)pow(10w)*(*p-48);
w=0;
while(a)
{
int?b=a%2;
c[w++]=b;
a/=2;
}
cout<<“<$INT“;
outfile<<“<$INT“;
for(w=w-1;w>=0;w--)
{cout< cout<<“>\n“;
outfile<<“>\n“;
n=0;
}
else?if(str[i]==‘=‘)?{cout<<“<$ASSIGN->“<“< else?if(str[i]==‘+‘)?{cout<<“<$PLUS->“<“< else?if(str[i]==‘*‘)
{
if(str[i+1]==‘*‘)?{cout<<“<$POWER->“<“< else?{cout<<“<$STAR->“<“< }
else?if(str[i]==‘‘)?{cout<<“<$COMMA->“<“< else?if(str[i]==‘(‘)?{cout<<“<$LPAR->“<“< else?if(str[i]==‘)‘)?{cout<<“<$RPAR->“<“< else?{cout<<“ERROR!“< }
outfile.close();
}
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件??????50176??2010-11-16?21:23??詞法分析器\Debug\vc60.idb
?????文件??????61440??2010-10-02?16:44??詞法分析器\Debug\vc60.pdb
?????文件?????262195??2010-10-13?12:44??詞法分析器\Debug\詞法分析器.exe
?????文件?????305940??2010-10-13?12:44??詞法分析器\Debug\詞法分析器.ilk
?????文件??????18718??2010-10-13?12:44??詞法分析器\Debug\詞法分析器.obj
?????文件?????302856??2010-10-02?15:46??詞法分析器\Debug\詞法分析器.pch
?????文件?????590848??2010-10-02?16:44??詞法分析器\Debug\詞法分析器.pdb
?????文件?????????17??2010-11-16?21:24??詞法分析器\ob
?????文件?????????61??2010-10-02?16:05??詞法分析器\sourcefile.txt
?????文件???????2516??2010-10-02?16:44??詞法分析器\詞法分析器.cpp
?????文件???????3451??2010-10-02?16:37??詞法分析器\詞法分析器.dsp
?????文件????????528??2010-10-02?16:44??詞法分析器\詞法分析器.dsw
?????文件??????41984??2010-11-16?21:28??詞法分析器\詞法分析器.ncb
?????文件??????48640??2010-11-16?21:28??詞法分析器\詞法分析器.opt
?????文件????????254??2010-10-13?12:45??詞法分析器\詞法分析器.plg
?????目錄??????????0??2010-10-03?21:55??詞法分析器\Debug
?????目錄??????????0??2010-11-16?21:28??詞法分析器
-----------?---------??----------?-----??----
??????????????1689624????????????????????17
評(píng)論
共有 條評(píng)論