资源简介
非常强大而又完整的一个C++程序,包括判断空字符,FIRST,FOLLOW,SELECT集合,短语判断等,备有WORD文档
代码片段和文件信息
#include
#include
#include
#include
using namespace std;
//////////////////////////////////////////////////////////////////////////
//全局变量字典{
int i = 0 j = 0 t = 0 n = 0 m = 0 x = 0 y = 0; //下标或临时变量
int len = 0; //字符串长度
int isENum = 0; //能推出e的终结符数量
bool isE = false; //标记是否能推出e
bool isUpdate = false; //标记是否更新过结果集
bool isSame = false; //标记是否有相同SELECT结果集
char strTemp[100] = “\0“; //临时字符串 或 要分析的字符串
char cTemp = ‘\0‘; //临时字符
int grammarNum = 0; //文法数量
char (*grammar)[32]; //文法 grammar[grammarNum][32]
char noEndSign[30]; //非终结符
char endSign[100]; //终结符
char (*grammarTemp)[32]; //临时文法 grammarTemp[grammarNum][32]
char (*isDerivation_e)[2]; //标记非终结符是否推出e数组 isDerivation_e[strlen(noEndSign)][2]
char (*frist)[100]; //每个文法符号的FRIST集 frist[strlen(noEndSign) + strlen(endSign)][100]
char (*bringFrist)[2][100]; //产生式的FRIST集 bringFrist[grammarNum][2][100]
char (*fllow)[100]; //非终结符的FLLOW集 fllow[strlen(noEndSign)][100]
char (*select)[2][100]; //select集 select[grammarNum][2][100]
char construeArray[100]; //分析栈
char bringStr[100]; //推导所用的产生式或匹配字符串
char stepNum[10]; //步聚数
char construeTop = ‘\0‘; //栈顶字符
char strTempTop = ‘\0‘; //剩余输入串头字符
//全局变量字典}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//输入文法
void InputGrammar()
{
//初始数据
do
{
n = 0; //标记成功赋值的变量数
fflush(stdin); //清空输入缓存区
cout<<“请输入产生式数量(1<=n<=20):“;
n = scanf(“%d“ &grammarNum);
} while(!n || grammarNum < 1 || grammarNum > 20);
grammar = new char[grammarNum][32];
//输入文法字符串
cout<<“\n“<<“文法输入规则如下:\n\na、大写英文字母表示非终结符。\
\nb、e表示空产生式。 \
\nc、除大写字母、#、‘、| 外的单字符表示终结符。\
\nd、不能出现递归文法。(如 S->Sa;)\
\ne、不能出现多余文法规则。(如 S->A,A不是非终结符;程序不检测)\
\nf、文法产生式长度不超过10个字符。(程序不检测)“<<“\n“<
for (i = 0; i < grammarNum; ++i)
{
cout<
//输入文法左部
strTemp[0] = getch();
if ( strTemp[0] >= ‘A‘ && strTemp[0] <= ‘Z‘)
{
grammar[i][0] = strTemp[0];
cout<“;
}
else
{
cout<<“请输入非终结符!“< --i;
continue;
}
//输入文法右部
cin>>strTemp;
for (j = 0; j < strlen(strTemp); ++j)
{
grammar[i][j+1] = strTemp[j];
}
grammar[i][++j] = ‘\0‘;
//检测文法合法性
len = strlen(grammar[i]);
for (j = 1; j < len; ++j)
{
//是否为空串
if (j == 1 && grammar[i][j] == ‘e‘ && grammar[i][j+1] == ‘\0‘)
{
continue;
}
if(grammar[i][j] == ‘#‘ || grammar[i][j] == ‘|‘ || grammar[i][j] == ‘e‘ || grammar[i][j] == ‘\‘‘)
{
cout<<“产生式含有非法字符,请重新输入:“< --i;
break;
}
}
//检测递归产生式
for(j=1; j {
if (grammar[i][0] != grammar[i][1])
{
break;
}
}
if (j == len)
{
cout<<“文法存在递归产生式,请重新输入:“< --i;
}
}
cout<<‘\n‘<
//显示文法
cout<<“你输入的文法是:“<<‘\n‘< for (i = 0; i < grammarNum; ++i) 属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 27486 2009-06-15 14:33 1061301219-潘鑫涛.cpp
文件 335360 2009-06-22 12:35 1061301219-潘鑫涛.doc
----------- --------- ---------- ----- ----
362846 2
相关资源
- Deep Belief Nets in C++ and CUDA C Volume 2 Au
- C++获取计算机的CPU ID,硬盘序列号等
- C++头文件转delphi工具 + 源码
- 国际象棋的qt源代码
- C++中头文件与源文件的作用详解
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 利用C++哈希表的方法实现电话号码查
- 移木块游戏,可以自编自玩,vc6.0编写
- C++纯文字DOS超小RPG游戏
- VC++MFC小游戏实例教程(实例)+MFC类库
- 连铸温度场计算程序(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
川公网安备 51152502000135号
评论
共有 条评论