資源簡介
將實驗一“詞法分析”的輸出結果,作為表達式語法分析器的輸入,進行語法解析,對于語法正確的表達式,報告“語法正確”; 對于語法錯誤的表達式,報告“語法錯誤”, 指出錯誤原因。
把語法分析器設計成一個獨立一遍的過程。

代碼片段和文件信息
#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.em
?????文件????????472??2014-01-11?12:32??2\2\Debug\2.exe.em
?????文件????????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\li
?????文件??????????2??2014-01-11?12:32??2\2\Debug\li
?????文件??????????2??2014-01-11?12:32??2\2\Debug\li
?????文件??????????2??2014-01-11?12:32??2\2\Debug\li
?????文件??????????2??2014-01-11?12:32??2\2\Debug\li
?????文件??????????2??2014-01-11?12:32??2\2\Debug\li
?????文件??????????2??2014-01-11?12:32??2\2\Debug\li
?????文件??????????2??2014-01-11?12:32??2\2\Debug\li
?????文件??????????2??2014-01-11?12:32??2\2\Debug\li
?????文件??????????2??2014-01-11?12:32??2\2\Debug\li
?????文件??????????2??2014-01-11?12:32??2\2\Debug\li
?????文件??????????2??2014-01-11?12:32??2\2\Debug\li
?????文件??????????2??2014-01-11?12:32??2\2\Debug\li
?????文件??????????2??2014-01-11?12:32??2\2\Debug\li
?????文件??????????2??2014-01-11?12:32??2\2\Debug\li
............此處省略35個文件信息
- 上一篇:DNS隱秘隧道pcap包
- 下一篇:uif65d.zip
評論
共有 條評論