“编译原理”课程设计报告 CPR-1206010231 struct start {
//表达式文法的预测分析表
//建立预测分析表
// // // // // //
+ * m ( ) #
char a1[10]; char a2[10]; char a3[10]; char a4[10]; char a5[10]; char a6[10]; };
struct start S={\struct start A={\struct start B={\struct start U={\struct start T={\
函数模块: bool pipei(int& b)
{
if(d=='+'||d=='*'||d=='m'||d=='('||d==')') { }
else if(d=='S') { }
else if(d=='A') { }
else if(d=='B') { }
else if(d=='U') { }
else if(d=='T') { }
else if(d=='#')
//栈顶元素为# //栈顶元素为T
//栈顶元素为U //栈顶元素为B
//栈顶元素为A //栈顶元素为S
//栈顶元素为+、*、m、(或)
//匹配
Page 13 of 24
“编译原理”课程设计报告 CPR-1206010231
{ } Else { } }
详细的流程图如下图所示:
【注:因为流程图过大,所以流程图采用VISIO绘制,图片过大导致下图不清晰,故附上一份词法分析流程图的vsd文件和一份jpg文件,望老师谅解】
//栈顶元素不满足以上条件时
Page 14 of 24
“编译原理”课程设计报告 CPR-1206010231
图2 语法分析程序流程图
【实验4.3】主要源代码
Page 15 of 24
“编译原理”课程设计报告 CPR-1206010231
该程序的主要部分如下: bool pipei(int& b)
//匹配,对输入串进行逐一匹配 {
char d; //定义栈顶元素
d=sc.top();
if(d=='+'||d=='*'||d=='m'||d=='('||d==')') //当栈顶元素为+、*、m、(或)时
{
if(s[b]==d)
//若输入串与栈顶元素相同
{
css[0]=s[b];
strcpy(css+1,\匹配\b++;
//字符串向前推进
sc.pop();
//栈顶元素出栈
return true; } else {
cout<<\return false; } }
else if(d=='S') //当栈顶元素为S时
{
if(s[b]=='m')
//若输入串为m
{
strcpy(css,\sc.pop();
Page 16 of 24
相关推荐: