• 大小: 3KB
    文件类型: .cpp
    金币: 2
    下载: 0 次
    发布日期: 2024-01-20
  • 语言: C/C++
  • 标签: LR分析器  c++  

资源简介

这是我自己用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

评论

共有 条评论