• 大小: 2.15MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-09-14
  • 语言: C/C++
  • 标签:

资源简介

该词法分析器是编译原理课程设计时的项目,使用c语言编写,文件夹中的大部分文件都是当时使用的参考文件,文件夹‘词法分析器’为完成的可以直接运行的词法分析器,解压后可以直接运行。

资源截图

代码片段和文件信息

#include“stdlib.h“
#include“stdio.h“
#include“string.h“
#include 
typedef struct
{
    char R;
    char r;
    int flag;
}array;
array F[30];
typedef struct
{
    char E;
    char e;
}charLode;
typedef struct
{
    charLode *base;
    int top;
}charstack;
char str[80][80]arr[80][80]brr[80][80];
int mkkppppFF=1;
char r[20];
int crr[30][30]FLAG=0;
char ccrr1[1][30]ccrr2[30][1];
void Initstack(charstack *s)//初始化栈
{
s->base=(charLode *)malloc(30*sizeof(charLode));
    s->top=-1;
}
void push(charstack *scharLode w)//入栈操作
{
s->top++;
s->base[s->top].E=w.E;
s->base[s->top].e=w.e;
}
void pop(charstack *scharLode *w)//出栈操作
{
w->E=s->base[s->top].E;
w->e=s->base[s->top].e;
s->top--;
}
int IsEmpty(charstack s)//判断栈是否为空
{
    if(s.top==-1)
        return 1;
    else
return 0;
}
int IsLetter(char ch)//判断非终结符
{
    if(ch>=‘A‘&&ch<=‘Z‘)
return 1;
    else
return 0;
}

int judge1(int n)//判断算符文法非终结符不能相邻
{
    int j=3i;
    for(i=0;i<=n;i++)
while(str[i][j]!=‘\0‘)
{
            char a=str[i][j];
            char b=str[i][j+1];
            if(IsLetter(a)&&IsLetter(b))
{
return 0;
break;
}
            else j++;
}
return 1;
}

void judge2(int n)
{
    int i;
    for(i=0;i<=n;i++)
{
if(str[i][3]==‘ε‘||judge1(n)==0||FLAG==1)//如果文法中含有ε或不是OG或两个非终结符有多个关系则不是OPG文法
{
printf(“grammar G is not operator priority grammar!\n“);
FF=0;
break;
}
if(i=n)
printf(“grammar G is operator priority grammar!\n“);
}
}

int search1(char r[]int kkchar a)//如果a的值等于r数组中的某个值,则返回1
{
    int i;
    for(i=0;i if(r[i]==a)   break;
if(i==kk)
return 0;
else
return 1;
}

void createF(int n)
{
    int k=0i=1;
    char c;
    int j;
    char t[10];
    t[0]=str[0][0];
    while(i<=n)
{
        if(t[k]!=str[i][0])
{
k++;  t[k]=str[i][0];   i++;
}
        else
            i++;
}
    kk=0;
    for(i=0;i<=n;i++)
{
j=3;
while(str[i][j]!=‘\0‘)
{
            c=str[i][j];
            if(IsLetter(c)==0)
{
                if(!search1(rkkc))   r[kk]=c;
                kk++;
}
            j++;
}
    }
    m=0;
    for(i=0;i for(j=0;j {  
F[m].R=t[i];  //
            F[m].r=r[j];//
            F[m].flag=0;
            m++;  /////////////
}
}

void search(charLode w)//////??????
{
int i;
    for(i=0;i        if(F[i].R==w.E&&F[i].r==w.e)
{
F[i].flag=1;
break;
}
}
void FirstVT(int n)//构造firstvt集合
{
    charstack sta;
    charLode ww;
    charLode w;
    int i=0k;
    char ab;
    Initstack(&sta);
    while(i<=n)
{
        k=3;
        w.E=str[i][0];
        a=str[i][k];
        b=str[i][k+1];
        if(!IsLetter(a))
{
            w.e=a;
            push(&staw);
            search(w);
            i++;
}
        else if(IsLetter(a)&&b!=‘\0‘&&!IsLetter(b))
{
         

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2011-06-03 11:25  cifa\
     文件        7519  2011-05-21 21:17  cifa\2.txt
     文件       14339  2011-05-21 21:21  cifa\3.txt
     文件        6204  2011-05-21 21:28  cifa\4.txt
     文件       12106  2011-05-21 21:32  cifa\5.txt
     文件        2785  2012-04-06 21:48  cifa\6.txt
     文件       11463  2011-05-28 11:28  cifa\cifa.cpp
     文件        3377  2011-05-27 22:45  cifa\cifa.dsp
     文件         516  2011-05-27 22:46  cifa\cifa.dsw
     文件       41984  2011-05-27 22:46  cifa\cifa.ncb
     文件       48640  2011-05-27 22:46  cifa\cifa.opt
     文件         736  2011-05-27 22:45  cifa\cifa.plg
     目录           0  2011-06-03 11:25  cifa\Debug\
     文件      196657  2011-05-27 22:45  cifa\Debug\cifa.exe
     文件      304116  2011-05-27 22:45  cifa\Debug\cifa.ilk
     文件       38750  2011-05-27 22:45  cifa\Debug\cifa.obj
     文件     3567708  2011-05-26 20:02  cifa\Debug\cifa.pch
     文件      476160  2011-05-27 22:45  cifa\Debug\cifa.pdb
     文件      148480  2011-05-27 22:45  cifa\Debug\vc60.idb
     文件       77824  2011-05-27 22:45  cifa\Debug\vc60.pdb
     文件      758326  2012-04-06 21:55  cifa\词法分析器.zip

评论

共有 条评论