📄 递归下降分析.cpp
字号:
// 递归下降分析.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "digui.h"
#include <stdlib.h>
/**************
文法描述:
E->TE'
E'->ATE'|ε
T->FT'
T'->MFT'|ε
F->(E)|i
A->+|-
M->*|/
**************/
//读入实验一中的二元式文件内容并完成转换
void ReadBuff()
{
char in[20];
FILE *infile;
do{
printf("请输入需要分析的源文件路径:");
scanf("%s",&in);
infile = fopen(in, "r");
if(infile==NULL)
printf("\n出错:未找到源文件,请再次输入源文件路径!\n\n");
}while(infile==NULL);
int id = 0, i = 0;
char b[20];
do{
fgets(b,20,infile);
char *cc;
cc = strtok(b,",");
// printf("\t%s\n",cc);
id = atoi(cc);
switch(id){
case 12:
case 13:
buff[i++] = 'i';
break;
case 25:
buff[i++] = '/';
break;
case 26:
buff[i++] = '+';
break;
case 27:
buff[i++] = '-';
break;
case 28:
buff[i++] = '*';
break;
case 30:
buff[i++] = '(';
break;
case 31:
buff[i++] = ')';
break;
default:
break;
}
}while(id != 0 && i <= 50);
printf("\n转换为文法对应形式:%s\n\n",buff);
int n = strlen(buff);
buff[n++] = '#';
}
//判断是否正确结束递归过程
bool Recurrence()
{
advance();
E();
if (currChar == '#')
return true;
else
return false;
}
//进行递归调用
void Digui()
{
//读入二元式并完成转换
ReadBuff();
printf("\n*****************************************\n");
printf(" 步 数 当前句柄 当前处理的字符\n");
printf("*****************************************\n");
if(Recurrence() && !tagOfError)
printf("\n分析结果:输入串合法!\n");
else
printf("\n分析结果:输入串非法!\n");
//重置操作
pointer = 0;
tagOfError = false;
step = 0;
}
int main(int argc, char* argv[])
{
int c=0;
printf("************************\n");
printf("************************\n");
printf("------------------------\n");
printf("************************\n");
printf("** <文法描述> **\n");
printf("** 1:E->TE' **\n");
printf("** 2:E'->ATE'|ε **\n");
printf("** 3:T->FT' **\n");
printf("** 4:T'->MFT'|ε **\n");
printf("** 5:F->(E)|i **\n");
printf("** 6:A->+|- **\n");
printf("** 7:M->*|/ **\n");
printf("************************\n");
do{
printf("\n请选择:1->递归下降分析 2->退出\n");
scanf("%d",&c);
if(c==1){
Digui();
}else if(c==2)
break;
else printf("请选择正确选项!\n");
}while(true);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -