资源简介
非常强大而又完整的一个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
- 上一篇:文件管理系统C++
- 下一篇:C语言编译器289297
相关资源
- 颜色识别形状识别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++ 猜拳小游戏
- XUnZip Zip解压缩.rar
评论
共有 条评论