• 大小: 378.55 KB
    文件类型: .rar
    金币: 1
    下载: 1 次
    发布日期: 2024-10-09
  • 语言: C/C++
  • 标签:

资源简介

这是一个由C语言编写的语法分析器,采用算符优先算法,source文件中读取算符优先分法后构造FIRSTVT和LASTVT集,并构造优先关系表,最有打印详细规约过程。

资源截图

代码片段和文件信息

#include 
#include  
#include  
#include 
#include 
#include 

#define  M 20
#define  N 20
#define SIZE  50
#define NUM 10



typedef struct{
char E;
char e;
}Element;


typedef struct{
Element *base;
Element *top;
int stacksize;
}SqStack;

int Line;
char F[M];
char f[N];
char FT[M][N];
char FV[M][N];
SqStack s;

void InitStack(SqStack &s){
s.base=(Element*)malloc(SIZE*sizeof(Element));
if(!s.base)
exit(0);
s.top=s.base;
s.stacksize=SIZE;
}

void Push(SqStack &sElement &e){
if(s.top-s.base>=s.stacksize){
s.base=(Element*)realloc(s.base(s.stacksize+NUM)*sizeof(Element));
if(!s.base)
exit(0);
s.top=s.base+s.stacksize;
s.stacksize+=NUM;
}

s.top->E=e.E;
s.top->e=e.e;
s.top++;
}

void Pop(SqStack &sElement &f)
{
if(s.top==s.base)
printf(“栈以空!“);
s.top--;
f.e=s.top->e;
f.E=s.top->E;
}

int  IsEmpty(SqStack s)
{
if(s.top==s.base)
return 1;
else
return 0;
}



int IsF(char ch)

if(ch!=‘-‘&&ch!=‘>‘&&ch!=‘|‘)
{
if(ch>=‘A‘&&ch<=‘Z‘) 
return 1;
else
return 0;
    }
else
return 2;
  

}

int Judge(char *pchar ch)
{
  int i;
  for(i=0;i  {
    if(p[i]==ch)
       return 0;
  }
  return 1;
}


int  Choose(char ch)
{
if(ch==‘-‘||ch==‘>‘)
return 0;
    if(ch==‘|‘)
        return 1;
    else
return 2;
}
void Init(char T[][N])
{
int ij;
for(i=0;i for(j=0;j T[i][j]=0;
}



void GetBC()
{
FILE *fp;
    char ch;
    int i=0j=0;

    if((fp=fopen(“d:\\source.txt““r“))==NULL)
{

printf(“open file error!“);
        exit(0);
    }


    while(!feof(fp))
    {
ch=fgetc(fp);
if(ch==‘\n‘)
continue;
        if(IsF(ch)==1)
{
if(Judge(Fch))
               F[i++]=ch;

}
        if(IsF(ch)==0)
{
if(Judge(fch))
                f[j++]=ch;
}
    }

    F[i]=‘\0‘;
    f[--j]=‘\0‘;
    fclose(fp);
}

void GetPro(char p[][N] )
{
FILE *fp;
    char ch;
    int i=0j=0;
    int k=0flag=0;
    if((fp=fopen(“d:\\source.txt““r“))==NULL)
{
printf(“Open error!“);
        exit(1);
}

    for(i=0;flag==0;i++)
    {
      
       for(j=0;j        { 
    if(k!=0)
{
k=0;
                p[i][j]=p[i-1][j];
continue;
}

   ch=fgetc(fp);
   if(ch==‘\n‘)
   break;
           if(feof(fp)>0)
   {
   flag=1;
       break;
   }
           if(Choose(ch)!=0)
   {
   if(ch!=‘|‘)
                   p[i][j]=ch;
               else
   {
   k++;
       break;

   }   
   }
   else
   j--;
       }
       p[i][j]=‘\0‘;
       
   

  }
   Line=i;
   printf(“已从文件source.txt中读取你的文法!\n\n“);
   fclose(fp);

}

void Insert(char Pchar achar T[][N])
{
int ij;
Element W;
for(i=0;i if(F[i]==P)
break;
fo

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

     文件      58368  2009-05-17 22:57  language\language.ncb

     文件      66560  2009-05-17 22:56  language\Debug\vc60.idb

     文件      61440  2009-05-17 22:53  language\Debug\vc60.pdb

     文件     196659  2009-05-17 22:53  language\Debug\language.exe

     文件     549888  2009-05-17 22:53  language\Debug\language.pdb

     文件      22331  2009-05-17 20:01  language\Debug\Test.obj

     文件     290832  2009-05-17 20:02  language\Debug\Test.pch

     文件     451584  2009-05-17 20:09  language\Debug\Test.pdb

     文件     290832  2009-05-17 21:29  language\Debug\language.pch

     文件     253668  2009-05-17 22:53  language\Debug\language.ilk

     文件      31258  2009-05-17 22:53  language\Debug\language.obj

     文件        752  2009-05-17 22:53  language\language.plg

     文件       3425  2009-05-17 22:53  language\language.dsp

     文件      10060  2009-05-17 22:57  language\language.cpp

     文件      48640  2009-05-17 22:57  language\language.opt

     文件        522  2009-05-17 22:57  language\language.dsw

     目录          0  2009-05-15 23:04  language\Debug

     目录          0  2009-05-15 23:04  language

----------- ---------  ---------- -----  ----

              2336819                    18


评论

共有 条评论

相关资源