• 大小: 3KB
    文件类型: .cpp
    金币: 2
    下载: 1 次
    发布日期: 2021-09-06
  • 语言: C/C++
  • 标签: 语法分析  

资源简介

需要实现的语法分析程序的功能是,接受一个表达式,分析该表达式,并根据输入正确与否给出相应信息。测试时,如果输入的表达式分析正确,则输出表示分析正确的信息;否则,输出表示分析错误的信息。

资源截图

代码片段和文件信息

#include
#include  //用于exit的头文件
#include  
#include  
#include 

void expr();//E对应的递归子程序的声明
void exprrest();//E1对应的递归子程序的声明
void term();//T对应的递归子程序的声明
void termrest();//T1对应的递归子程序的声明
void factor();//F对应的递归子程序的声明
void Error();//出错处理函数的声明
void gettoken();//词法分析函数gettoken()的声明
char ch = ‘ ‘;//用来装当前输入对应的字符
int i=0;//数组位置变量置0
char strToken[30]={“ “};//用来装数字串的数组
FILE *in=fopen( “input.txt“ “r“ );//建立文件指针并打开文件

//将字符串置成空串函数
void Retract(char str[30])
{
for(int j=0;j<30;j++)
{
str[j]=0;//将数组内的数值全部重置
}
}

//词法分析函数
void gettoken()
{  
    ch=fgetc(in);//读入一个字符
if(isspace(ch))//判断是否为空格
{
while(1)
{
if(isspace(ch)){ch=fgetc(in);}//如果是空格则指针一直下移
else break;//直到第一个不为空格的为止,跳出本次循环
}
}

if(isdigit(ch))//判断是否是数字
{
while(1)
{
if(isdigit(ch))
{
      strToken[i]=ch;//将后个数字放入前一下数字之后
  i++;//数组中空位置后移 
  ch=fgetc(in);//读入下一个字符
    }
else 
{
printf(“%s“strToken);//输出数字串
        i=0;//将空位置重新计数
        Retract(strToken);//将数组重新开始置起
        fseek(in-21);//将指针的位置在当前位置的基础上向前移2个字符
        ch=fgetc(in);//读入当前字符
    break;//跳出循环

}
}
    else

         if(ch==‘+‘){printf(“+“);}//当前是符号+的处理
     else if(ch==‘-‘){printf(“-“);}//当前是符号-的处理
     else if(ch==‘*‘){printf(“*“);}//当前是符号*的处理
     else if(ch==‘

评论

共有 条评论