-
大小: 653KB文件類(lèi)型: .rar金幣: 2下載: 1 次發(fā)布日期: 2022-10-04
- 語(yǔ)言: 其他
- 標(biāo)簽:
資源簡(jiǎn)介
完成以下描述算術(shù)表達(dá)式的LL(1)文法的遞歸下降分析程序
G[E]: E→TE′
E′→ATE′|ε
T→FT′
T′→MFT′|ε
F→ (E)|i
A→+|-
M→*|/

代碼片段和文件信息
/*?實(shí)驗(yàn)題目:?識(shí)別下列表達(dá)式??*/
/*G[E]:???E→TE‘
??????????E‘→ATE‘|ε
??????????T→FT‘
??????????T‘→MFT‘|ε
??????????F→?(E)|i
??????????A→+|-
??????????M→*|/
*/
#include“stdio.h“
#include“malloc.h“
#include“string.h“
#include
void?e();
void?t();
void?e_prime();
void?t_prime();
void?f();
bool?match(char);
void?advance();
char?ch;
int?right;
char?juzi[10];
int?stri=0;
int?line=0;
void?main(void)
{
???right=1;
???char??TOKENCL[2]string[10]cht;
???FILE?*fp;
???int?i=0flagflagover=0;
???while((fp=fopen(“test1.txt““r“))==NULL)
{
printf(“cannot?open?file!(Ctrl+C?exit)\n“);
//scanf(“\n%s“filename);
}
???cht=fgetc(fp);
???while(cht!=‘\n‘){
???//while(cht!=‘\n‘)???????????//字符是回車(chē)時(shí),開(kāi)始新的一行檢索
???do{
???cht=fgetc(fp);????????
???if(isdigit(cht))
???{
????TOKENCL[0]=cht;
cht=fgetc(fp);
i=1;
if(isdigit(cht))
{
TOKENCL[i]=cht;
????i++;
????cht=fgetc(fp);
}?????????????????????????//取完二元式類(lèi)型
TOKENCL[i]=‘\0‘;
if((cht==‘‘)&&(strcmp(TOKENCL“10“)==0))
{
flag=1;
//flagf=1;
cht=fgetc(fp);
}
if((strcmp(TOKENCL“7“)==0||strcmp(TOKENCL“6“)==0)&&cht==‘‘&&flag==1)
{
string[stri]=‘i‘;
stri++;
}
else?if(strcmp(TOKENCL“18“)==0&&cht==‘‘)
{
for(int?j=0;j<2;j++)
{
cht=fgetc(fp);
}??????????????????????//跳出cht指向‘
string[stri]=cht;
stri++;
cht=fgetc(fp);
}
???if(strcmp(TOKENCL“2“)==0&&cht==‘‘)
???{
????????????flagover=1;
break;
???}
???if(strcmp(TOKENCL“1“)==0&&cht==‘‘)
???{
????????????line++;
???}
???} ??
???}while(cht!=‘;‘);
???line++;
???if(flagover==0){
??? string[stri]=‘#‘;
stri++;
string[stri]=‘\0‘;
flag=0;
strcpy(juzistring);
?stri=0;
????printf(“\n%s\n“juzi);
????e();
???if(right==1&&ch==‘#‘)
???printf(“ok\n“);
???else
???printf(“no\n“);
???stri=0;
???string[0]=‘\0‘;
???}
???else
???break;
???}
}
void?e()
{
t();
e_prime();
}
void?e_prime()
{
if(match(‘+‘)||match(‘-‘))
{
????advance();
t();
e_prime();
}
????if(!match(‘#‘)||!match(‘)‘))
return;?????????
????else
{
?????????right=0;
?printf(“第%d行有多余字符\n“l(fā)ine);
}
}
void?t()
{
f();
t_prime();
}
void?t_prime()
{
?if(match(‘*‘)||match(‘/‘))
{
advance();
f();
t_prime();
}
??else
????if(?!match(‘#‘)&&!match(‘)‘)&&!match(‘+‘)&&!match(‘-‘))
{
?????????right=0;
?printf(“第%d行出錯(cuò)\n“l(fā)ine);
}
}
void?f()
{
if(match(‘i‘))
advance();
else?if(match(‘(‘))
{
advance();
e();
if(match(‘)‘))
advance();
else
{ ?right=0;
?printf(“第%d行出錯(cuò)\n“l(fā)ine);
}
}
else
{
right=0;
?printf(“第%d行出錯(cuò)\n“l(fā)ine);
}
}
void?advance()
{
stri++;
ch=juzi[stri];
}
bool?match(char?comp)
{
if(comp==juzi[stri])
{
return?true;
}
else
{
return?false;
}
}
?屬性????????????大小?????日期????時(shí)間???名稱(chēng)
-----------?---------??----------?-----??----
?????文件??????11232??2011-05-06?16:20??實(shí)驗(yàn)二\1.jpg
?????文件??????12633??2011-05-06?16:25??實(shí)驗(yàn)二\2.jpg
?????文件??????50176??2011-04-21?17:51??實(shí)驗(yàn)二\編譯實(shí)驗(yàn)二\Debug\exp2_revise?parser.bsc
?????文件?????180320??2011-05-26?09:27??實(shí)驗(yàn)二\編譯實(shí)驗(yàn)二\Debug\exp2_revise?parser.exe
?????文件?????198444??2011-05-26?09:27??實(shí)驗(yàn)二\編譯實(shí)驗(yàn)二\Debug\exp2_revise?parser.ilk
?????文件??????11197??2011-05-26?09:27??實(shí)驗(yàn)二\編譯實(shí)驗(yàn)二\Debug\exp2_revise?parser.obj
?????文件?????223664??2011-05-06?16:19??實(shí)驗(yàn)二\編譯實(shí)驗(yàn)二\Debug\exp2_revise?parser.pch
?????文件?????467968??2011-05-26?09:27??實(shí)驗(yàn)二\編譯實(shí)驗(yàn)二\Debug\exp2_revise?parser.pdb
?????文件??????????0??2011-04-21?17:51??實(shí)驗(yàn)二\編譯實(shí)驗(yàn)二\Debug\exp2_revise?parser.sbr
?????文件??????50176??2011-05-29?20:02??實(shí)驗(yàn)二\編譯實(shí)驗(yàn)二\Debug\vc60.idb
?????文件??????53248??2011-05-26?09:27??實(shí)驗(yàn)二\編譯實(shí)驗(yàn)二\Debug\vc60.pdb
?????文件???????2985??2011-05-26?09:27??實(shí)驗(yàn)二\編譯實(shí)驗(yàn)二\exp2_revise?parser.cpp
?????文件???????3547??2011-05-29?20:02??實(shí)驗(yàn)二\編譯實(shí)驗(yàn)二\exp2_revise?parser.dsp
?????文件????????561??2011-05-29?20:02??實(shí)驗(yàn)二\編譯實(shí)驗(yàn)二\exp2_revise?parser.dsw
?????文件??????58368??2011-05-29?20:02??實(shí)驗(yàn)二\編譯實(shí)驗(yàn)二\exp2_revise?parser.ncb
?????文件??????48640??2011-05-29?20:02??實(shí)驗(yàn)二\編譯實(shí)驗(yàn)二\exp2_revise?parser.opt
?????文件????????270??2011-05-29?20:02??實(shí)驗(yàn)二\編譯實(shí)驗(yàn)二\exp2_revise?parser.plg
?????文件????????164??2011-05-26?09:28??實(shí)驗(yàn)二\編譯實(shí)驗(yàn)二\test1.txt
?????文件?????564736??2011-05-28?17:21??實(shí)驗(yàn)二\編譯實(shí)驗(yàn)二報(bào)告.doc
?????目錄??????????0??2011-07-08?21:59??實(shí)驗(yàn)二\編譯實(shí)驗(yàn)二\Debug
?????目錄??????????0??2011-07-08?21:59??實(shí)驗(yàn)二\編譯實(shí)驗(yàn)二
?????目錄??????????0??2011-07-08?21:59??實(shí)驗(yàn)二
-----------?---------??----------?-----??----
??????????????1938329????????????????????22
評(píng)論
共有 條評(píng)論