資源簡介
這是我自己用c++編的LR分析器,下載后即用。對編譯時出現的各種錯誤都能糾正,很好用,希望能夠幫助大家。
另外補充一下:此編譯器實現功能主要是+*()的操作。
代碼片段和文件信息
#include
#include
#include
using?namespace?std;
char?f[9]={‘i‘‘+‘‘*‘‘(‘‘)‘‘#‘‘E‘‘T‘‘F‘};
/*將產生式左部寫在前,逆序存放產生式內容*/
char?anal[8][2]=
{
{‘E‘‘E‘}??????//?1?E->E+T
{‘E‘‘T‘}????//?2?E->T
{‘T‘‘T‘}?????//?3?T->T*F
{‘T‘‘F‘}????//?4?T->F
{‘F‘‘(‘}?????//?5?F->(E)
{‘F‘‘i‘}????//?6?F->i
};
void?display(int?lr)
{
cout<<“按“;
switch(lr)
{
case?1:cout<<“E->E+T“;break;
case?2:cout<<“E->T“;break;
case?3:cout<<“T->T*F“;break;
case?4:cout<<“T->F“;break;
case?5:cout<<“F->(E)“;break;
case?6:cout<<“F->i“;break;
}
cout<<“歸約“< }
//LR分析表(個位表狀態,十位1表r,十位2表s)
int?LR[12][9]=
{
{25-1-124-2-1123}
{-3260-3-2100000}
{-31227-31212000}
{-3141401414000}
{25-1-124-2-1823}
{-3161601616000}
{25-1-124-2-1093}
{25-1-124-2-10010}
{-3260-331-4000}
{-31127-31111000}
{0131301313000}
{0151501515000}
};
int?anal_f(char?c)//由符號判斷分析表的列
{
switch(c)
{
case?‘i‘:return?0;break;
case?‘+‘:return?1;break;
case?‘*‘:return?2;break;
case?‘(‘:return?3;break;
case?‘)‘:return?4;break;
case?‘#‘:return?5;break;
case?‘E‘:return?6;break;
case?‘T‘:return?7;break;
case?‘F‘:return?8;break;
}
}
void?main()
{
queuewenfa;//輸入
stackzhan_s;//棧中的數字--狀態
stackzhan_f;//棧中的字符
????
char?ss[10];
char?idtf;
int?numtsjksym;
cout<<“------>>歡迎使用LR文法<<-------\n“<<“請輸入文法串:“;
while(id!=‘#‘)
{
cin>>id;
wenfa.push(id);
}
????cout< zhan_s.p
- 上一篇:單像空間后方交會用C語言實現的
- 下一篇:MFC多人聊天室
評論
共有 條評論