资源简介
该词法分析器是编译原理课程设计时的项目,使用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
- 上一篇:记账本小程序
- 下一篇:南京理工大学c++课程设计6.2日期格式处理
相关资源
- 编译原理简单的编译器源码
- C语言实现一个编译器-编译原理南开大
- 编译原理课程实验报告词法分析器及
- 编译原理与技术李文生:LR分析法C+
- C语言简化编译器前端 编译原理 LR1
- C-Minus编译器 编译原理实验
- LL1文法
- 现代编译原理C语言描述-高清-完整目
- TINY扩充语言的语法分析(实现 while、
- 编译原理课程设计词法语法分析器
- 编译原理课程设计整个项目和报告
- 编译原理LL1语法分析器C++版源代码
- 编译原理之算符优先算法-迭代法
- 编译原理词法分析器实验报告含源代
- 编译原理词法分析器C++版源代码
- 现代编译原理-c语言描述虎书
- 合工大编译原理实验报告
- LL1文法消除左递归编译原理mfc实现完
- 南邮编译原理实验
- 编译原理及实践
- 编译原理LL(0)C语言小子集源代码
- 第四次上机作业 语法分析2
- PLO编译器的扩展编译原理课程实践
- 编译原理课程设计C编写的C-编译器
- 编译原理课程设计LR(0)语法分析器
- 西电编译原理大作业 C语言版
- 编译原理 简单函数绘图语言的解释器
- 编译原理之语义分析
- 编译原理 词法分析器
- 编译原理综合性实验 选择部分C语言的
评论
共有 条评论