資源簡(jiǎn)介
這是我自己用c++編的LR分析器,下載后即用。對(duì)編譯時(shí)出現(xiàn)的各種錯(cuò)誤都能糾正,很好用,希望能夠幫助大家。
另外補(bǔ)充一下:此編譯器實(shí)現(xiàn)功能主要是+*()的操作。
代碼片段和文件信息
#include
#include
#include
using?namespace?std;
char?f[9]={‘i‘‘+‘‘*‘‘(‘‘)‘‘#‘‘E‘‘T‘‘F‘};
/*將產(chǎn)生式左部寫在前,逆序存放產(chǎn)生式內(nèi)容*/
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分析表(個(gè)位表狀態(tài),十位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)//由符號(hào)判斷分析表的列
{
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;//棧中的數(shù)字--狀態(tài)
stackzhan_f;//棧中的字符
????
char?ss[10];
char?idtf;
int?numtsjksym;
cout<<“------>>歡迎使用LR文法<<-------\n“<<“請(qǐng)輸入文法串:“;
while(id!=‘#‘)
{
cin>>id;
wenfa.push(id);
}
????cout< zhan_s.p
評(píng)論
共有 條評(píng)論