• 大小: 1.67MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-08-16
  • 语言: 其他
  • 标签:

资源简介

这是一个简单的自顶向下语法分析器,其中的预测分析表是固定给出的,而分析过程严格按照教材的流程图走,输出的结果是表达式的分析栈。

资源截图

代码片段和文件信息

#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.embed.manifest
     文件         472  2015-05-17 17:02  自顶向下语法分析器的设计与实现\lab2\lab2\Debug\lab2.exe.embed.manifest.res
     文件         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\link.12100.read.1.tlog
     文件           2  2015-05-26 08:32  自顶向下语法分析器的设计与实现\lab2\lab2\Debug\link.12100.write.1.tlog
     文件           2  2015-05-26 08:32  自顶向下语法分析器的设计与实现\lab2\lab2\Debug\link.12100-cvtres.read.1.tlog
     文件           2  2015-05-26 08:32  自顶向下语法分析器的设计与实现\lab2\lab2\Debug\link.12100-cvtres.write.1.tlog
     文件           2  2015-05-26 08:32  自顶向下语法分析器的设计与实现\lab2\lab2\Debug\link.5328.read.1.tlog
............此处省略26个文件信息

评论

共有 条评论