#define HEAD
#include "OurHead.h"
#define END '$'
int prior_table[DEFAULT_OPER_NUM][DEFAULT_OPER_NUM]; //优先表矩阵,行号列号对应算符在oper_list中的下标
char oper_list[DEFAULT_OPER_NUM]; //所有算符集合
int oper_num = 0; //算符的个数
vn_t vn_list[DEFAULT_VN_NUM]; //所有非终结符集合
int vn_num = 0; //非终结符个数
char *grammar[MAX_GRA_NUM][2]; //符合要求的文法集,注意是指针数组。分为文法左部和右部两部分
int gra_num = 0; //符合要求的文法数目
node_t *tree_root; //语法树根节点,注意是建立在栈上的
char start_vn;
void sentence()
{
char *buf, choice,c;
buf = (char *)malloc(sizeof(char)*MAX_BUFFER);
if(!buf)
{
printf("Allocation fails.\n");
exit(-1);
}
get_input(buf);
if(!analyze(buf))
{
flushall();c = getchar();flushall();
return;
}
flushall();c = getchar();flushall();
while(1)
{
system("cls");
printf("************算符优先分析器************\n");
printf("请选择:\n\t1.显示语法树;\n\t2.返回\n");
printf("你的选择是 :");
flushall();
choice = getchar();
flushall();
switch(choice)
{
case '1': system("cls");printf("************算符优先分析器************\n显示语法树:\n");display_tree();flushall();c = getchar();flushall();break;
case '2': return;
default: break;
}
}
}
void new_syntax()
{
BOOL is_oper_syn = TRUE;
char *buf;
char choice,c;
oper_num = 0;
gra_num = 0;
vn_num = 0;
buf = (char *)malloc(sizeof(char)*MAX_BUFFER);
if(!buf)
{
printf("Allocation fails.\n");
exit(-1);
}
system("cls");
printf("************算符优先分析器************\n");
printf("请输入文法(注:在新的一行中输入\"$\"为结束)\n");
memset(buf, 0, MAX_BUFFER);
get_input(buf);
while(is_oper_syn && buf[0] != END){
is_oper_syn = buf_deal(buf);
if(!is_oper_syn)
{
printf("\nError : 您输入的不是算符文法!\n");
oper_num = 0;
vn_num = 0;
gra_num = 0;
flushall();c = getchar();flushall();
return;
}
get_input(buf);
}
oper_list[oper_num++] = '#';
while(1)
{
printf("\n请输入开始的非终结符:");
flushall();
start_vn = getchar();
flushall();
if(get_vn(start_vn) == -1)
printf("\nError : 您输入有误,请重新输入!\n");
else
break;
}
init_table();
#ifndef DEBUG
get_FIRVT_LASTVT(get_vn(start_vn));
#endif
#ifdef DEBUG
debug2();
#endif
if(!create_table())
{
printf("\nError : 您输入的不是算符优先文法!\n");
oper_num = 0;
vn_num = 0;
gra_num = 0;
flushall();c = getchar();flushall();
return;
}
while(1)
{
system("cls");
printf("************算符优先分析器************\n");
printf("请选择功能:\n");
printf("\t1.显示FIRST_VT集和LAST_VT集。\n\t2.显示算符优先表。\n\t3.输入句子\n\t4.返回\n");
printf("你的选择是:");
flushall();
choice = getchar();
flushall();
switch(choice)
{
case '1':system("cls");printf("************算符优先分析器************\n显示FISTVT集和LASTVT集:\n");display_fir_lastvt();flushall();c = getchar();flushall();break;
case '2':system("cls");printf("****************************算符优先分析器******************************\n\t\t\t 显示算符优先表");display_table();flushall();c = getchar();flushall();break;
case '3':system("cls");printf("************算符优先分析器************\n");printf("请输入句子\(以\"#\"结束\):\n");sentence();break;
case '4':return;break;
default:break;
}
}
}
void Print_Inform()
{
char c;
printf("算符优先分析器 \n作者:Hungry_Fool 欢迎光临我的博客:http://blog.csdn.net/skyline0623\n");
printf("日 期:2011-5\n");
flushall();
c = getchar();
}
int main(void)
{
char choice,c;
while(1)
{
system("cls");
printf("************算符优先分析器************\n");
printf("请选择功能:\n");
printf("\t1.输入新文法。\n\t2.关于。\n\t3.退出\n");
printf("你的选择是 :");
flushall();
choice = getchar();
flushall();
switch(choice)
{
case '1': new_syntax();break;
case '2': system("cls");printf("************算符优先分析器************\n");Print_Inform();flushall();c = getchar();flushall();break;
case '3': system("cls");printf("*******************************算符优先分析器*******************************\n\n");printf("\n\n\n\n\n\t\t\t感谢您的使用!您已经退出!\n\n\n\t\t\t");exit(0);
#ifdef DEBUG
case '4': debug(); break;
#endif
default:break;
}
}
return 0;
}

skyline0623
- 粉丝: 132
最新资源
- 中国城市资源配置效率(2006至2021)
- 基于OpenMV的矩形识别与定位实战:低成本机器视觉项目详解
- 基于MFC实现的WebSocket客户端完整示例
- 基于OpenMV的单目视觉测距系统开发:原理解析与实战应用
- 基于51单片机的智能水杯仿真
- S7-1200 以太网和伺服测试
- PID轨迹跟踪仿真实现
- Cartoon GUI Pack 2.0.1,非常漂亮的卡通UI
- Matlab实现MVMD多元变分模态分解信号分量可视化完整源码和数据
- 撤回2天以上微信妙招
- 软件开发GitHub平台功能详解:代码托管、协作开发与开源社区建设的作用和影响
- 解决鼠标下滑回跳问题的简单脚本
- 模式识别与图像处理 课程作业
- 初学者必备:PLC编程关键梯形图
- chrome插件学习示例
- TA_Lib-0.4.28-cp311-win_amd64.whl
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



- 1
- 2
- 3
前往页