资源简介
该词法分析器是编译原理课程设计时的项目,使用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语言编译器
- 编译原理实验-词法分析(c语言代码)
- 北邮-编译原理-词法分析
- 现代编译原理-C语言描述
- 编译原理实验报告+代码+使用说明
- 编译原理课程设计-C语言子集编译器
- 赋值语句翻译c语言实现四元式
- 编译原理用C++消除左递归
- 编译原理简易C编译器
- 实现语法分析器-编译原理
- 编译原理 LR分析器 c++代码
- 设计并实现TINYC语言的扫描程序TINYC
- LL(1)文法分析全过程(FIRST/FLLOW/S
- 编译原理 LR0项目集规范族的构造 L
- 山东大学编译原理实验源代码c++版
- 简单函数绘图语言的解释器
- Lex和Yacc从入门到精通.pdf
- 简易词法分析器——基于C语言
- LL(1)文法的实现-mfc-编译原理学习
- 词法分析代码内有报告
- 编译原理LL1文法的mfc实现含消除左递
- 编译原理词法分析实验
- pl/0语言的编译器
- C++实现编译原理自动机、LL1文法、及
- 编译原理语义分析程序 c++实现
- 编译原理 课程设计 DAG 报告+源码C++版
- 编译原理简单的编译器源码
- C语言实现一个编译器-编译原理南开大
- 编译原理课程实验报告词法分析器及
- 编译原理与技术李文生:LR分析法C+
评论
共有 条评论