资源简介
这是一个简单的自顶向下语法分析器,其中的预测分析表是固定给出的,而分析过程严格按照教材的流程图走,输出的结果是表达式的分析栈。
代码片段和文件信息
#include “StdAfx.h“
#include
#include
#include
#include
char A[20];/*分析栈*/
char B[20];/*剩余串*/
char Vt[20]={‘i‘‘+‘‘*‘‘(‘‘)‘‘#‘};/*终结符 */
char Vn[20]={‘E‘‘X‘‘T‘‘Y‘‘F‘};/*非终结符 */
int j=0b=0top=0l;/*L为输入串长度 */
typedef struct type/*产生式类型定义 */
{
char origin;/*产生式左式 */
char array[5];/*产生式右式 */
int length;/*右式字符个数 */
}type;
type ee1e2tt1t2ff1;/*结构体变量 */
type C[10][10];/*预测分析表 */
void print()/*输出分析栈 */
{
int a;/*指针*/
for(a=0;a<=top+1;a++)//top+1=top+“#”+X中的非终结符
printf(“%c“A[a]);
printf(“\t\t“);
}/*print*/
void print1()/*输出剩余串*/
{
int j;
for(j=0;j printf(“ “);
for(j=b;j<=l;j++)
printf(“%c“B[j]);
printf(“\t\t\t“);
}/*print1*/
void main()
{
int mnk=0flag=0finish=0;
char chx;
type cha;/*用来接受C[m][n]*/
/*把文法产生式赋值结构体*/
e.origin=‘E‘;
strcpy(e.array“TX“);
e.length=2;
e1.origin=‘X‘;
strcpy(e1.array“+TX“);
e1.length=3;
e2.origin=‘X‘;
strcpy(e2.array“?“);
e2.length=1;
t.origin=‘T‘;
strcpy(t.array“FY“);
t.length=2;
t1.origin=‘Y‘;
strcpy(t1.array“*FY“);
t1.length=3;
t2.origin=‘Y‘;
strcpy(t2.array“?“);
t2.length=1;
f.origin=‘F‘;
strcpy(f.array“i“);
f.length=1;
f1.origin=‘F‘;
strcpy(f1.array“(E)“);
f1.length=3;
for(m=0;m<=4;m++)/*初始化分析表*/
for(n=0;n<=5;n++)
C[m][n].origin=‘N‘;/*全部赋为空*/
/*填充分析表*/
C[0][0]=e;C[0][3]=e;
C[1][1]=e1;C[1][4]=e2;C[1][5]=e2;
C[2][0]=t;C[2][3]=t;
C[3][1]=t2;C[3][2]=t1;C[3][4]=t2;C[3][5]=t2;
C[4][0]=f;C[4][3]=f1;
printf(“请输入要分析的字符串(只包含i+*()#其中以#结束):“);
do/*读入分析串*/
{
scanf(“%c“&ch);
if ((ch!=‘i‘)&&(ch!=‘+‘)&&(ch!=‘*‘)&&(ch!=‘(‘)&&(ch!=‘)‘)&&(ch!=‘#‘))
{
printf(“输入串中有非法字符\n“);
exit(1);
}
B[j]=ch;
j++;
}while(ch!=‘#‘);
l=j;/*分析串长度*/
ch=B[0];/*当前分析字符*/
A[top]=‘#‘; A[++top]=‘E‘;/*‘#‘‘E‘进栈*/
printf(“步骤\t\t分析栈 \t\t剩余字符 \t\t所用产生式 \n“);
do
{
x=A[top--];/*x为当前栈顶字符*/
printf(“%d“k++);
printf(“\t\t“);
for(j=0;j<=5;j++)/*判断是否为终结符*/
{
if(x==Vt[j])
{
flag=1;
}
}
if(flag==1)/*如果是终结符*/
{
if(x==‘#‘)//“#“被定义在终结符中
{
finish=1;/*结束标记*/
printf(“acc!\n“);/*接受 */
getchar();
getchar();
exit(1);
}
else if(x==ch)
{
print();
print1();
printf(“%c匹配\n“ch);
ch=B[++b];/*下一个输入字符*/
flag=0;/*恢复标记*/
}
else/*出错处理*/
{
print();
print1();
printf(“%c出错\n“ch);/*输出出错终结符*/
exit(1);
}
}
else/*非终结符处理*/
{
for(j=0;j<=4;j++)
if(x==Vn[j])
{
m=j;/*行号*/
break;
}
for(j=0;j<=5;j++)
if(ch==Vt[j])
{
n=j;/*列号*/
break;
}
cha=C[m][n];
if(cha.origin!=‘N‘)/*判断是否为空*/
{
print();
print1();
printf(“%c->“cha.origin);/*输出产生式*/
for(j=0;j
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2015-06-03 20:23 自顶向下语法分析器的设计与实现\lab2\
目录 0 2015-06-03 20:23 自顶向下语法分析器的设计与实现\lab2\Debug\
文件 32256 2015-05-26 08:32 自顶向下语法分析器的设计与实现\lab2\Debug\lab2.exe
文件 330292 2015-05-26 08:32 自顶向下语法分析器的设计与实现\lab2\Debug\lab2.ilk
文件 486400 2015-05-26 08:32 自顶向下语法分析器的设计与实现\lab2\Debug\lab2.pdb
目录 0 2015-06-03 20:23 自顶向下语法分析器的设计与实现\lab2\ipch\
目录 0 2015-06-03 20:23 自顶向下语法分析器的设计与实现\lab2\ipch\lab2-26acea89\
文件 2359296 2015-05-28 18:53 自顶向下语法分析器的设计与实现\lab2\ipch\lab2-26acea89\lab2-61eb272d.ipch
文件 2772992 2015-05-28 18:54 自顶向下语法分析器的设计与实现\lab2\lab2.sdf
文件 879 2015-05-17 15:55 自顶向下语法分析器的设计与实现\lab2\lab2.sln
文件 13312 2015-05-28 18:54 自顶向下语法分析器的设计与实现\lab2\lab2.suo
目录 0 2015-06-03 20:23 自顶向下语法分析器的设计与实现\lab2\lab2\
目录 0 2015-06-03 20:23 自顶向下语法分析器的设计与实现\lab2\lab2\Debug\
文件 1554 2015-05-26 08:32 自顶向下语法分析器的设计与实现\lab2\lab2\Debug\cl.command.1.tlog
文件 3036 2015-05-26 08:32 自顶向下语法分析器的设计与实现\lab2\lab2\Debug\CL.read.1.tlog
文件 988 2015-05-26 08:32 自顶向下语法分析器的设计与实现\lab2\lab2\Debug\CL.write.1.tlog
文件 406 2015-05-17 17:02 自顶向下语法分析器的设计与实现\lab2\lab2\Debug\lab2.exe.em
文件 472 2015-05-17 17:02 自顶向下语法分析器的设计与实现\lab2\lab2\Debug\lab2.exe.em
文件 381 2015-05-26 08:32 自顶向下语法分析器的设计与实现\lab2\lab2\Debug\lab2.exe.intermediate.manifest
文件 91 2015-05-26 08:32 自顶向下语法分析器的设计与实现\lab2\lab2\Debug\lab2.lastbuildstate
文件 5713 2015-05-26 08:32 自顶向下语法分析器的设计与实现\lab2\lab2\Debug\lab2.log
文件 16748 2015-05-26 08:32 自顶向下语法分析器的设计与实现\lab2\lab2\Debug\lab2.obj
文件 1179648 2015-05-17 15:55 自顶向下语法分析器的设计与实现\lab2\lab2\Debug\lab2.pch
文件 713 2015-05-17 15:55 自顶向下语法分析器的设计与实现\lab2\lab2\Debug\lab2.vcxprojResolveAssemblyReference.cache
文件 0 2015-05-17 15:55 自顶向下语法分析器的设计与实现\lab2\lab2\Debug\lab2.write.1.tlog
文件 198 2015-05-17 17:02 自顶向下语法分析器的设计与实现\lab2\lab2\Debug\lab2_manifest.rc
文件 2 2015-05-26 08:32 自顶向下语法分析器的设计与实现\lab2\lab2\Debug\li
文件 2 2015-05-26 08:32 自顶向下语法分析器的设计与实现\lab2\lab2\Debug\li
文件 2 2015-05-26 08:32 自顶向下语法分析器的设计与实现\lab2\lab2\Debug\li
文件 2 2015-05-26 08:32 自顶向下语法分析器的设计与实现\lab2\lab2\Debug\li
文件 2 2015-05-26 08:32 自顶向下语法分析器的设计与实现\lab2\lab2\Debug\li
............此处省略26个文件信息
- 上一篇:AnyCAD三维模型展示
- 下一篇:超声波测距模块的原理图和源程序
评论
共有 条评论