资源简介
基于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\li
文件 2 2018-12-04 10:35 编译原理实验3\编译原理实验3\Debug\li
文件 2 2018-12-04 10:35 编译原理实验3\编译原理实验3\Debug\li
文件 2 2018-12-04 10:35 编译原理实验3\编译原理实验3\Debug\li
文件 2 2018-12-04 10:35 编译原理实验3\编译原理实验3\Debug\li
文件 2 2018-12-04 10:35 编译原理实验3\编译原理实验3\Debug\li
文件 1728 2018-12-04 10:35 编译原理实验3\编译原理实验3\Debug\li
文件 4016 2018-12-04 10:35 编译原理实验3\编译原理实验3\Debug\li
文件 1050 2018-12-04 10:35 编译原理实验3\编译原理实验3\Debug\li
文件 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个文件信息
相关资源
- 编译原理~金成植版课后答案~
- 《编译原理(第3版).pdf》
- 编译原理的实验12376
- 西电编译原理大作业
- 编译原理实验指导书 河北工业大学
- 编译原理 词法和语法分析
- 清华大学--编译原理--课件,练习题及
- 编译原理 课件 北航计算机学院
- LL(1)的语法分析程序
- Parsing Techs A Practical Guide pdf
- 编译原理 南京大学计算机系
- 河北工业大学编译原理实验报告及源
- 编译原理陈火旺版共十章ppt讲义
- 编译原理学习指导与习题解析陈英
- 哈工大编译原理的课件
- 清华大学计算机系网络课程之编译原
- 编译原理(第2版)+张素琴+吕映芝清
- 编译原理课程设计 SLR(1)文法
- 编译原理-国防科技大学课件
- 王汝传版编译原理资料
- 编译原理课程设计源代码
- 程序设计语言编译原理(第三版)-陈
- 编译原理——简单计算器的编译器的
- 编译系统透视:图解编译原理.rar
- 南开大学编译原理大作业 实现一个编
- 编译原理 第二版 刘坚 课后习题答案
- 编译原理综合实习答辩PPT
- 编译原理课后习题答案清华大学
- 编译原理实验-flex自动构造词法分析
- 陈意云(高教2005)编译原理习题精选
评论
共有 条评论