• 大小: 9.38MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-10-15
  • 语言: 其他
  • 标签: 编译原理  

资源简介

基于LR(0)方法的语法分析程序 直接输入根据己知文法构造的LR(0)分析表。 目的和其它要求参考“基于LL(1)方法的词法分析程序”

资源截图

代码片段和文件信息

#include 
#include 
#include 
#define stack_size 20
#define stackincrement 10
using namespace std;
int p = 0 q = 0 zh sh x;
char Vn[3] = { ‘E‘‘A‘‘B‘ }; //非终结符
char Vt[5] = { ‘a‘‘b‘‘c‘‘d‘‘#‘ }; //终结符
typedef struct {
char *bottom;
char *top;
int size;
// char data[stack_size];

}stack;
int Initstack(stack &s) //初始化栈
{
s.bottom = (char *)malloc(stack_size * sizeof(char));
if (!s.bottom) exit(-1);
s.top = s.bottom;
s.size = stack_size;
return(1);
}
int push(stack &s char e) //入符号栈
{
//int i;
if (s.top - s.bottom >= s.size) {
s.bottom = (char*)realloc(s.bottom (stack_size + stackincrement) * sizeof(char));//栈如果不够扩容
if (!s.bottom) exit(-1);//扩容不了返回-1
s.top = s.bottom + s.size;
s.size += stackincrement;
}
*s.top++ = e;//s.top=es.top++
 //cout << e << “进符号栈“;
 // s.data[x]=e; 
 // x++;
 //输出所有元素
 // for(i=0;i return(1);
}
int push2(stack &s int e) //入状态栈
{
//int i;
if (s.top - s.bottom >= s.size) {
s.bottom = (char
*)realloc(s.bottom (stack_size + stackincrement) * sizeof(char));
if (!s.bottom) exit(-1);
s.top = s.bottom + s.size;
s.size += stackincrement;

}
*s.top++ = e;
//cout << e << “进状态栈“;
return(1);
}
int pop(stack &s char *e) //出符号栈
{
if (s.top == s.bottom)
return(0);
*e = *--s.top;
//cout << *e << “出符号栈“ << “ “;
return(1);
}
int pop2(stack &s int *e) //出状态栈
{
if (s.top == s.bottom)
return(0);
*e = *--s.top;
//cout << *e << “出状态栈“ << “ “;
return(1);
}
int action(int m int n char a) //ACTION 表
{
int i;
int act[12][5] =
{
{ 23000 }
{ 000020 }
{ 004100 }
{ 005110 }
{ 004100 }
{ 005110 }
{ 2121212121 }
{ 2222222222 }
{ 2323232323 }
{ 2525252525 }
{ 2424242424 }
{ 2626262626 }
};
for (i = 0; i if (a == Vt[i])//找到终结符对应的i
break;
if (i == n && a != Vt[n - 1])
return(0);//
else
{
zh = act[m][i];
//if(zh==0)cout<<“出错“< //else return(zh);
return(zh);

}
}
int go(int m int n char a) //goto 表
{
int i;
int go[12][3] =
{
{ 100 }
{ 000 }
{ 060 }
{ 007 }
{ 080 }
{ 009 }
{ 000 }
{ 000 }
{ 000 }
{ 000 }
{ 000 }
{ 000 }
};
for (i = 0; i if (a == Vn[i])
break;
if (i == n && a != Vn[n - 1]
)return(0);
else
{
sh = go[m][i];
//if(sh==0)cout<<“出错“;
//else return(sh);
return(sh);
}
}
void main()
{
char ch y;
int x v e u ok = 1;
int i = 0 index = 0 k;
char st[20];
stack s;//符号栈
stack t;//状态栈
cout << “ 输入要分析的字符串(end by ‘;‘):“ << endl;
cin >> st[0];
while (st[i] != ‘;‘)
{
i++;
cin >> st[i];
}
st[i] = ‘#‘;
Initstack(s);//初始化符号栈
Initstack(t);//初始化状态栈

push(s ‘#‘);
push2(t 0);

while (ok == 1) {
ch = st[index];//字符串集
index++;
cout << “分析:“ << ch << “  “;

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

    ..A..H.     38912  2018-12-07 20:19  编译原理实验3\.vs\编译原理实验3\v15\.suo

     文件    5476352  2018-12-07 20:19  编译原理实验3\.vs\编译原理实验3\v15\Browse.VC.db

     文件   29622272  2018-12-07 20:04  编译原理实验3\.vs\编译原理实验3\v15\ipch\AutoPCH\5f476cb0c9c0ba1a\MAIN.ipch

     文件      86528  2018-12-07 20:04  编译原理实验3\Debug\编译原理实验3.exe

     文件     621700  2018-12-07 20:04  编译原理实验3\Debug\编译原理实验3.ilk

     文件     839680  2018-12-07 20:04  编译原理实验3\Debug\编译原理实验3.pdb

     文件   15269888  2018-12-04 10:34  编译原理实验3\ipch\编译原理实验3-16e6d0ab\编译原理实验3-d27ad4b5.ipch

     文件         96  2018-12-13 13:13  编译原理实验3\代码原地址.txt

     文件      46176  2018-12-13 13:12  编译原理实验3\内置的文法.png

     文件        750  2018-12-04 10:35  编译原理实验3\编译原理实验3\Debug\cl.command.1.tlog

     文件      11940  2018-12-04 10:35  编译原理实验3\编译原理实验3\Debug\CL.read.1.tlog

     文件        486  2018-12-04 10:35  编译原理实验3\编译原理实验3\Debug\CL.write.1.tlog

     文件          2  2018-12-04 10:35  编译原理实验3\编译原理实验3\Debug\link-cvtres.read.1.tlog

     文件          2  2018-12-04 10:35  编译原理实验3\编译原理实验3\Debug\link-cvtres.write.1.tlog

     文件          2  2018-12-04 10:35  编译原理实验3\编译原理实验3\Debug\link.4268-cvtres.read.1.tlog

     文件          2  2018-12-04 10:35  编译原理实验3\编译原理实验3\Debug\link.4268-cvtres.write.1.tlog

     文件          2  2018-12-04 10:35  编译原理实验3\编译原理实验3\Debug\link.4268.read.1.tlog

     文件          2  2018-12-04 10:35  编译原理实验3\编译原理实验3\Debug\link.4268.write.1.tlog

     文件       1728  2018-12-04 10:35  编译原理实验3\编译原理实验3\Debug\link.command.1.tlog

     文件       4016  2018-12-04 10:35  编译原理实验3\编译原理实验3\Debug\link.read.1.tlog

     文件       1050  2018-12-04 10:35  编译原理实验3\编译原理实验3\Debug\link.write.1.tlog

     文件      77840  2018-12-07 20:04  编译原理实验3\编译原理实验3\Debug\main.obj

     文件        438  2018-12-04 10:35  编译原理实验3\编译原理实验3\Debug\mt.command.1.tlog

     文件        418  2018-12-04 10:35  编译原理实验3\编译原理实验3\Debug\mt.read.1.tlog

     文件        418  2018-12-04 10:35  编译原理实验3\编译原理实验3\Debug\mt.write.1.tlog

     文件        632  2018-12-04 10:35  编译原理实验3\编译原理实验3\Debug\rc.command.1.tlog

     文件        390  2018-12-04 10:35  编译原理实验3\编译原理实验3\Debug\rc.read.1.tlog

     文件        398  2018-12-04 10:35  编译原理实验3\编译原理实验3\Debug\rc.write.1.tlog

     文件     207872  2018-12-04 10:35  编译原理实验3\编译原理实验3\Debug\vc100.idb

     文件     233472  2018-12-04 10:35  编译原理实验3\编译原理实验3\Debug\vc100.pdb

............此处省略41个文件信息

评论

共有 条评论