xxxx18一60岁hd中国/日韩女同互慰一区二区/西西人体扒开双腿无遮挡/日韩欧美黄色一级片 - 色护士精品影院www

  • 大小: 3KB
    文件類型: .rar
    金幣: 2
    下載: 0 次
    發布日期: 2021-08-20
  • 語言: 其他
  • 標簽:

資源簡介

建立文法及其LL(1)分析表表示的數據結構,設計并實現相應的預測分析器,對源程序經詞法分析后生成的二元式代碼流進行預測分析,如果輸入串是文法定義的句子則輸出“是”,否則輸出“否”。

資源截圖

代碼片段和文件信息

#include?
#include?
#include?
#include?
//???????????????0???1???2???3???4???5???6
char?termin[7]={‘#‘‘;‘‘+‘‘*‘‘(‘‘)‘‘i‘};??????????/*終結符號*/
char?non_ter[8]={‘p‘‘P‘‘e‘‘t‘‘E‘‘f‘‘T‘‘S‘};?????????/*非終結符號*/

char?Yy_pushtab[13][4]=???????????????????????????????????/*逆序存放產生式右部內容*/
{
{‘P‘‘;‘‘e‘‘\0‘}
{‘p‘‘\0‘}
{‘\0‘}
{‘E‘‘t‘‘\0‘}
{‘\0‘}
{‘E‘‘t‘‘+‘‘\0‘}
{‘\0‘}
{‘T‘‘f‘‘\0‘}
{‘T‘‘f‘‘*‘‘\0‘}
{‘\0‘}
{‘)‘‘e‘‘(‘‘\0‘}
{‘i‘‘\0‘}
{‘p‘‘\0‘}
};

int?Yy_d[8][7]=????????????????????????????//LL1分析表
{
-1 0 -1 -1 0 -1 0
2 1 -1 -1 1??-1 1
-1 4 -1 -1 3 4 3
-1 -1 -1 -1 7 -1 7
-1 6 5 -1 -1 6 -1
-1 -1 -1 -1 10 -1 11
-1 9 9 8 -1 9 -1
-1 12 -1 -1 12 -1 12
};


int?is_Vt(char?x)//判斷是否為終結符
{
int?i;
// printf(“x?=?%c?\n“x);
for(i=0;i<7;i++)
{
if(termin[i]==x){
// ????printf(“is_Vt?:?%c??%d\n“termin[i]i);
????????????return?1;???????//若是,返回1
}
}
?????return?0;????//若不是,返回0
}



/*******************************************
?主函數
********************************************/
int?main()
{
int?ijkpqwhat_to_doa;
????char?chre;
char?W[20]=“S“S[20]=“S“str[20]st[20];
????printf(“\n?請輸入該文法的句型:“);
scanf(“%s“st);
//????st={‘1‘‘+‘‘2‘‘;‘};
????for(?a=0;a<=strlen(st);a++)
????{
????????r=st[a];
????????if(isdigit(r))??//判斷是否是十進制數
????????????str[a]=‘i‘;
????????else?str[a]=st[a];
????}
????st[strlen(st)]=‘#‘;
i=strlen(str);
// str[i]=‘#‘;
// str[i+1]=‘\0‘;

j=0;
ch=str[j];

printf(“S棧(字母)?|?str棧(輸入串)??|?What_to_do?\n“);
????while(S[0]!=‘\0‘)//分析棧非空則繼續
{
????????for(q=0;S[q]!=‘\0‘;q++)
????????????W[q]=S[q];
????????W[q]=‘\0‘;
//????????printf(“resurlt?:?%d\n“is_Vt(S[strlen(S)-1]));
if(is_Vt(S[strlen(S)-1]))//棧頂為終結符
{
// printf(“\n棧頂元素為:%c?ch為:?%c?\n“S[strlen(S)-1]ch);
what_to_do=-1;
if(S[strlen(S)-1]!=ch)//棧頂與輸入符號不等
{
printf(“\n分析結果:該符號串不是文法的句型!\n“);
????????????????return?0;
}

else
{
????????????????S[strlen(S)-1]=‘\0‘;
j++;
ch=str[j];
}
}
else?//棧頂為非終結符
{
// printf(“進來過\n“);
????????????for(i=0;;i++)//獲得Yy_d[][]的第一個下標
if(non_ter[i]==S[strlen(S)-1])
break;
for(k=0;;k++)//獲得Yy_d[][]的第二個下標
{
if(termin[k]==ch)
break;
if(k==strlen(termin))//輸入符號不是終結符
{
printf(“詞法錯誤!“);
return?0;
}
}
what_to_do=Yy_d[i][k];
if(what_to_do==-1)
{
printf(“語法錯誤!“);
return?0;
}

else???????????????????????????????????//把棧頂元素彈出???再把右部壓棧
{
????????????????if(Yy_pushtab[what_to_do][0]==‘\0‘)
S[strlen(S)-1]=‘\0‘;
else
{
int?mnh;
????n=strlen(S)-1;
????m=n;
????for(?h=0;h S[n++]=Yy_pushtab[what_to_do][h];
????S[m+strlen(Yy_pushtab[what_to_do])]=‘\0‘;
}
}
}

printf(“?%-10s????????

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件???????3415??2018-05-09?16:40??非遞歸預測分析器.c

?????文件???????2218??2018-05-07?21:58??編譯原理非遞歸預測.lnk

-----------?---------??----------?-----??----

?????????????????5633????????????????????2


評論

共有 條評論

相關資源