• 大小: 2.37MB
    文件类型: .rar
    金币: 2
    下载: 0 次
    发布日期: 2024-02-01
  • 语言: 其他
  • 标签: 语法分析  c语言  

资源简介

将实验一“词法分析”的输出结果,作为表达式语法分析器的输入,进行语法解析,对于语法正确的表达式,报告“语法正确”;    对于语法错误的表达式,报告“语法错误”, 指出错误原因。 把语法分析器设计成一个独立一遍的过程。

资源截图

代码片段和文件信息

#include “stdafx.h“
#include
#include
#include
#include
using namespace std;

static int rg=1; 
struct newsym
{
char restr[15];
};

newsym sym[50];

int E(int nnewsym *sym);
int T(int nnewsym *sym);
int D(int nnewsym *sym);

int E(int nnewsym *sym)  
{
if (!strcmp(sym[n].restr“plus“) || !strcmp(sym[n].restr“minus“))
{
n++;
if(!strcmp(sym[n-2].restr“lparen“))
{
cout<<“缺少标识符或数字“< rg=0;
}
if (!strcmp(sym[n].restr“ident“) ||!strcmp(sym[n].restr“number“)|| !strcmp(sym[n].restr“lparen“))
{
n=T(nsym);
}
}
else if (!strcmp(sym[n].restr“ident“) ||!strcmp(sym[n].restr“number“)|| !strcmp(sym[n].restr“lparen“))
{
n=T(nsym);
}
if((!strcmp(sym[n].restr“ident“) ||!strcmp(sym[n].restr“number“))&&(!strcmp(sym[n-1].restr“ident“) ||!strcmp(sym[n-1].restr“number“)))
{
n++;
cout<<“缺少运算符“< rg=0;
}
if((!strcmp(sym[n].restr“ident“) ||!strcmp(sym[n].restr“number“))&&!strcmp(sym[n-1].restr“rparen“))
{
n++;
cout<<“缺少运算符!“< rg=0;
}
while (!strcmp(sym[n].restr“plus“)||!strcmp(sym[n].restr“minus“))
{
n++;
n=T(nsym);
}
return n;
}

int T(int nnewsym *sym) 
{
if (!strcmp(sym[n].restr“ident“) ||!strcmp(sym[n].restr“number“)|| !strcmp(sym[n].restr“lparen“))
{
n=D(nsym);
}
else
{
cout<<“缺少标识符或数字“< rg=0;
}

while (!strcmp(sym[n].restr“times“)||!strcmp(sym[n].restr“slash“))
{
n++;
n=D(nsym);
}
return n;
}

int D(int nnewsym *sym) 
{
if (!strcmp(sym[n].restr“ident“) ||!strcmp(sym[n].restr“number“) )
{
n++;
}
else if (!strcmp(sym[n].restr“lparen“))
{
n++;
n=E(nsym);
if (!strcmp(sym[n].restr“rparen“))
{
n++;
}
else
{
cout<<“缺少右括号“< rg=0;
}
}
else
{
cout<<“缺少标识符或数字“< rg=0;
}
return n;
}



int main()
{
ifstream infile(“2.txt“);
string buffer;
int ijn;
for (n=0;n<=49;n++)
{
sym[n].restr[0]=‘\0‘;
}
n=0;
while (!infile.eof() && infile >> buffer)//没有到文件末尾,读取文件内容到buffer
{
i=j=0;
if(buffer[0]==‘(‘)
{
while(buffer[i+1]!=‘‘) 
{
i++;
sym[n].restr[j]=buffer[i];
j++;
}
sym[n].restr[j]=‘\0‘;
n++;
}
}                                  //把字符串放入二维数组
n=0j=0;
n=E(nsym);
int right_answer=1;
if (!strcmp(sym[n-1].restr“\0“))
{
right_answer=0;
}
else
{
right_answer=1;
}
if (rg==1 && !strcmp(sym[n].restr“\0“) && n!=0 && right_answer==1)
{
cout<<“语法正确!“< system(“pause“);
}
else
{
cout<<“语法错误!“< system(“pause“);
}
return 0;
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2751  2014-01-09 12:32  2\2\2.cpp

     文件         92  2014-01-09 12:38  2\2\2.txt

     文件       4356  2014-01-04 15:00  2\2\2.vcxproj

     文件       1325  2014-01-04 15:00  2\2\2.vcxproj.filters

     文件        143  2014-01-04 15:00  2\2\2.vcxproj.user

     文件        406  2014-01-04 15:00  2\2\Debug\2.exe.embed.manifest

     文件        472  2014-01-11 12:32  2\2\Debug\2.exe.embed.manifest.res

     文件        381  2014-01-11 12:32  2\2\Debug\2.exe.intermediate.manifest

     文件         60  2014-01-14 16:10  2\2\Debug\2.lastbuildstate

     文件     214248  2014-01-11 12:32  2\2\Debug\2.obj

     文件    1179648  2014-01-11 12:32  2\2\Debug\2.pch

     文件        192  2014-01-04 15:00  2\2\Debug\2_manifest.rc

     文件       2978  2014-01-11 12:32  2\2\Debug\cl.command.1.tlog

     文件      26418  2014-01-11 12:32  2\2\Debug\CL.read.1.tlog

     文件       1798  2014-01-11 12:32  2\2\Debug\CL.write.1.tlog

     文件          2  2014-01-11 12:32  2\2\Debug\link-cvtres.read.1.tlog

     文件          2  2014-01-11 12:32  2\2\Debug\link-cvtres.write.1.tlog

     文件          2  2014-01-11 12:32  2\2\Debug\link.3180-cvtres.read.1.tlog

     文件          2  2014-01-11 12:32  2\2\Debug\link.3180-cvtres.write.1.tlog

     文件          2  2014-01-11 12:32  2\2\Debug\link.3180.read.1.tlog

     文件          2  2014-01-11 12:32  2\2\Debug\link.3180.write.1.tlog

     文件          2  2014-01-11 12:32  2\2\Debug\link.4432-cvtres.read.1.tlog

     文件          2  2014-01-11 12:32  2\2\Debug\link.4432-cvtres.write.1.tlog

     文件          2  2014-01-11 12:32  2\2\Debug\link.4432.read.1.tlog

     文件          2  2014-01-11 12:32  2\2\Debug\link.4432.write.1.tlog

     文件          2  2014-01-11 12:32  2\2\Debug\link.4452-cvtres.read.1.tlog

     文件          2  2014-01-11 12:32  2\2\Debug\link.4452-cvtres.write.1.tlog

     文件          2  2014-01-11 12:32  2\2\Debug\link.4452.read.1.tlog

     文件          2  2014-01-11 12:32  2\2\Debug\link.4452.write.1.tlog

     文件          2  2014-01-11 12:32  2\2\Debug\link.4508-cvtres.read.1.tlog

............此处省略35个文件信息

评论

共有 条评论