资源简介
需要创建一个名字叫project.txt的文件来存储要识别的文法
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
using namespace std;
string M[2000][2000]; //任务分析表
stack cc; //分析栈
queue qq; //输入串
set ww[200]; //first集
set T; //终结符集
set N; //非终结符集合
set vv[200]; //中间过程记录集
set ff[200]; //fllow集合
set select[200]; //select集合
int step = 0; //步骤统计变量
int error_flag=0; //错误标志位
int nullflag[1000]; //是否推空标志
int nullselect[1000]; //集合是否推空标志
int ll=0; //文法行数
int T_flag[1000]; //右侧是否含有终结符
int length_char[1000]; //每行文法的字符个数
char line[100][1024]; //文法记录表
//判断是否是非终结符
bool isN(char v)
{
if(v>=‘A‘&&v<=‘Z‘)
{
return true;
}
return false;
}
//判断是否是终结符
bool isT(char v)
{
if(isN(v)==0&&v!=‘|‘&&v!=‘-‘&&v!=‘>‘)
{
return true;
}
return false;
}
//输出符号栈里的值
void showCC()
{
stack cc2=cc;
stack cc3;
while(!cc2.empty())
{
cc3.push(cc2.top());
cc2.pop();
}
while(!cc3.empty())
{
cout< cc3.pop();
}
cout<<“\t“;
}
//输出匹配字符串剩余部分
void showPP()
{
queue pp2;
pp2=qq;
while(!pp2.empty())
{
cout< pp2.pop();
}
cout<<“\t“;
}
//判断集合记录是否为空,也即是否处理完所有过程
bool isEmpty()
{
for(set::iterator ite1 = N.begin();ite1!=N.end();ite1++)
{
if(!vv[int(*ite1)].empty())
return false;
}
return true;
}
//求和,用于是否完成空字符判断
int sum()
{
int suum=0;
for(set::iterator ite1 = N.begin();ite1!=N.end();ite1++)
{
suum+=nullflag[int(*ite1)];
}
return suum;
}
//判断是否有推空非终结符
void _null()
{
int cha=999;
int yuan=sum();
while(cha!=0)
{
//0代表不能推出空,1代表可以
for(int i=0;i {
if(T_flag[i]==0)
{
int t=1;
for(int j=3;j {
t=t&&nullflag[int(line[i][j])];
}
nullflag[int(line[i][0])]=t;
}
}
cha=yuan-sum();
yuan=sum();
}
}
//判断select集合时,右侧是否可以推空
void _null2()
{
for(int i=0;i {
for(set::iterator ite2 = select[i].begin();ite2!=select[i].end();ite2++)
{
if(*ite2==‘^‘)
{
nullselect[i]=1;
break;
}
}
}
}
void raedFromFile()
{
fstream infile(“project.txt“ios::in);
while(infile.getline(line[ll]sizeof(line[ll])))
{
for(int i=0;i<100;i++)
{
if(int(line[ll][i])==0)
{
length_char[ll]=i;
break;
}
- 上一篇:联络矩阵最小路集不交化
- 下一篇:vc 视频会议系统v2.8 源码
相关资源
- C++中头文件与源文件的作用详解
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 利用C++哈希表的方法实现电话号码查
- 移木块游戏,可以自编自玩,vc6.0编写
- C++纯文字DOS超小RPG游戏
- 算符优先语法分析器(C语言编写)
- VC++MFC小游戏实例教程(实例)+MFC类库
- 编译原理c语言编译器
- 编译原理实验-词法分析(c语言代码)
- 连铸温度场计算程序(C++)
- 6自由度机器人运动学正反解C++程序
- Em算法(使用C++编写)
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- 白话C++(全)
- C++标准库第1、2
- 大数类c++大数类
- C++语言编写串口调试助手
- c++素数筛选法
- C++ mqtt 用法
- 商品库存管理系统 C++ MFC
- c++ 多功能计算器
- C++17 In Detail
- 嵌入式QtC++编程课件
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
评论
共有 条评论