资源简介
文法为:
0:S->E
1:E->E+E
2:E->E*E
3:E->(E)
4:E->id
运行时只需输入待验证的句子即可
如要实现其他SLR(1)文法的识别,只需修改头文件和错误处理函数即可
作者:WMD
日期:2018-6-1
代码片段和文件信息
/*
文法为:
0:S->E
1:E->E+E
2:E->E*E
3:E->(E)
4:E->id
运行时只需输入待验证的句子即可
如要实现其他SLR(1)文法的识别,只需修改头文件和错误处理函数即可
作者:WMD
日期:2018-6-1
*/
#include “slr1.h“
linkList L; //带头结点的双向链表
linkList tail; //记录链表的尾
int ip=0; //访问输入串元素
char thetext[20]; //用于接收用户输入
char space[20]; //用于控制输出缩进
int text_len=0;
int status_num=0; //栈中元素个数(状态栈和符号栈中元素个数相同)
int status_top=0; //记录状态栈栈顶
/******************************************************************************************/
int main() //主函数
{
menu();
return 0;
}
/******************************************************************************************/
void menu() //菜单函数
{
initialList(L);
while(1)
{
cout<<“请输入要验证的句子输入‘0‘退出:“< cin>>thetext;
if(strcmp(thetext“0“)==0)
return;
cout<<“输入的句子为: “<
ip=0;
while(thetext[ip]!=‘\0‘) //在句子末尾加入#
ip++;
thetext[ip]=‘#‘;
thetext[ip+1]=‘\0‘;
ip=0;
text_len=strlen(thetext);
for(ip=0;ip<(20-text_len);ip++)
{
space[ip]=‘ ‘;
}
space[ip]=‘\0‘;
ip=0;
initial(); //对栈进行初始化,并将初始状态入栈
push(0‘#‘);
tail=L->next;
cout<<“状态栈“<<“ “<<“符号栈“<<“ “<<“输入串“<<“ “<<“动作说明“< cout<<“------------------------------------------------------------------------------------------“<
analyze();
system(“pause“);
system(“cls“);
}
}
/******************************************************************************************/
int initialList(linkList &L) //栈初始化函数
{
L=new LNode;
if(!L)
return ERROR;
L->next=NULL;
L->prev=NULL;
return OK;
}
/******************************************************************************************/
void initial() //对栈进行清空
{
linkList pq;
p=L;
while(p->next!=NULL)
{
q=p->next;
p->next=q->next;
delete q;
}
status_num=0;
}
/******************************************************************************************/
void push(int statuschar symbol) //入栈
{
linkList pointer=new LNode;
pointer->status=status;
pointer->symbol=symbol;
pointer->next=L->next;
L->next=pointer;
pointer->prev=L;
if(pointer->next!=NULL)
pointer->next->prev=pointer;
status_num++;
}
/******************************************************************************************/
void pop() //出栈
{
linkList pointer;
pointer=L->next;
L->next=pointer->next;
pointer->next->prev=L;
free(pointer);
status_num--;
}
/******************************************************************************************/
void analyze() //分析
{
int result_tab=0; //记录查表结果
int location_tab=0; //记录在终结符表中的位置
int status_new=0; //记录查询goto后获取的状态
int i=0fre=0;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 553014 2018-06-01 15:05 SLR1\Debug\SLR1.exe
文件 797952 2018-06-01 15:05 SLR1\Debug\SLR1.ilk
文件 199582 2018-06-01 15:05 SLR1\Debug\slr1.obj
文件 2181788 2018-06-01 15:05 SLR1\Debug\SLR1.pch
文件 1115136 2018-06-01 15:05 SLR1\Debug\SLR1.pdb
文件 74752 2018-06-04 13:52 SLR1\Debug\vc60.idb
文件 110592 2018-06-01 15:05 SLR1\Debug\vc60.pdb
文件 190 2018-06-10 14:49 SLR1\readme.txt
文件 7624 2018-06-10 14:50 SLR1\slr1.cpp
文件 4319 2018-06-01 15:04 SLR1\SLR1.dsp
文件 516 2018-06-01 15:02 SLR1\SLR1.dsw
文件 1332 2018-06-01 15:03 SLR1\slr1.h
文件 50176 2018-06-10 14:50 SLR1\SLR1.ncb
文件 48640 2018-06-10 14:50 SLR1\SLR1.opt
文件 873 2018-06-01 15:05 SLR1\SLR1.plg
目录 0 2018-06-01 15:05 SLR1\Debug
目录 0 2018-06-10 14:50 SLR1
----------- --------- ---------- ----- ----
5146486 17
相关资源
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
- c++ 画图(14Qt-XPS)
- c++多边形交并差运算
- VC++基于OpenGL模拟的一个3维空间模型
- c++ 虚拟摄像头
- hook,捕获所有案件,查找所有窗口,
- C语言课设计算器
- c++ 简易贪吃蛇源码
- 高精度加法(c++代码)
- C++调用百度地图案例
- 北京化工大学计算方法(C/C++)讲义
- 基于VC++的SolidWorks二次开发SolidWorks
- c++ 模拟鼠标按键
- OFD编辑器
- 北邮-编译原理-词法分析
- Beginning C++17 From Novice to Professional
- C++ STL实现
- opencv手部轮廓识别以及轨迹识别
- 百度C++编码规范
- C++ sql2008 WebServer通讯.docx
- c++ 定时关机程序源码
- 基于VSCode和CMake实现C++开发
- c++语法查询工具
- c++ 账务系统源码
- GBT 28169-2011 嵌入式软件 C语言编码规范
- c++ 猜拳小游戏
评论
共有 条评论