资源简介
编译原理 课程设计 小子集程序 南工大计软
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
#define NULL 0
struct Stack // 栈结构体: 序号、内容、连接下一结点指针
{
int num;
char name;
struct Stack *next;
};
struct Guiyue// 规则集结构体:序号、规则长度、符号、连接下一结点指针
{
int num;
int count;
char name;
struct Guiyue *next;
};
struct Relation // 分析表结构体:状态序号、对应符号列、操作类型的对应序号、操作类型、连接下一结点指针
{
int line_States ;
char rank_Letter;
int relationship;
char name;
struct Relation *next;
};
struct Sign // 符号表结构体: 自变量名、标识类型、连接下一结点指针
{
char name[20];
char kind;
struct Sign *next;
};
struct Word // 单词表结构体: 单词名字、标识类型、状态、序号、行号、连接符号表指针、连接下一结点指针
{
char name[20];
char mark_name;
int state;
int num;
int line;
struct Sign *link;
struct Word *next;
};
FILE *fp1;//文件指针
int row=1line[10000]Lin[300]w_num;//字符行变量、字符行、单词所在行、字符数
char buffer[10000];//字符串缓冲区
Stack *MarkPush(Stack *ipchar markint I_i)//压栈
{
Stack *s;
s=(Stack *)malloc(sizeof(Stack));
s->name=mark;
s->num=I_i;
s->next=ip;
ip=s;
return ip;
}
void MarkPop(Stack *ip)//出栈
{
Stack *q;
char name;
name=ip->name;
q=ip->next;
if(ip->next!=NULL)
{
ip->name=ip->next->name;
ip->num=ip->next->num;
ip->next=ip->next->next;
free(q);
}
}
int judge(char ch)// 接收ch判断字符,变量flag返回字符类别
{
int flag;
if(ch==‘!‘||ch==‘$‘||ch==‘&‘||ch==‘*‘||ch==‘(‘||ch==‘)‘||ch==‘-‘||ch==‘_‘||
ch==‘+‘||ch==‘=‘||ch==‘|‘||ch==‘{‘||ch==‘}‘||ch==‘[‘||ch==‘]‘||ch==‘;‘||
ch==‘:‘||ch==‘“‘||ch==‘<‘||ch==‘‘||ch==‘>‘||ch==‘.‘||ch==‘/‘||ch==‘\‘‘)
flag=1;
else if(‘0‘<=ch&&ch<=‘9‘)
flag=2;
else if((‘a‘<=ch&&ch<=‘z‘)||(‘A‘<=ch&&ch<=‘Z‘))
flag=3;
else if(ch==‘ ‘)
flag=4;
else if(ch==‘\n‘)
flag=5;
else if(ch==‘?‘)
flag=6;
else if(feof(fp1))
flag=7;//结束
else
flag=0; //illegal character
return(flag);
}
//======================================================================================================
// 词法分析函数: void scan()
// 数据传递: 形参fp接收指向文本文件头的文件指针;
// 全局变量buffer与line对应保存源文件字符及其行号,char_num保存字符总数。
void scan()
{
char ch;
int flagj=0i=-1;
while(!feof(fp1))
{
ch=fgetc(fp1);
flag=judge(ch);
printf(“%c“ch);//显示打开的文件
if(flag==1||flag==2||flag==3) {i++;buffer[i]=ch;line[i]=row;}
else if(flag==4) {i++;buffer[i]=‘?‘;line[i]=row;}
else if(flag==5) {i++;buffer[i]=‘~‘;row++;}
else if(flag==7) continue;
else cout<<“\n请注意,第“<
}
w_num=i;
/*****************确定单词所在的行*****************/
int onetwok=0;
for(i=0;i one=judge(buffer[i]);
two=judge(buffer[i+1
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 58368 2009-01-08 14:31 C编译器\Debug\vc60.idb
文件 69632 2009-01-08 14:31 C编译器\Debug\vc60.pdb
文件 237636 2009-01-08 14:31 C编译器\Debug\简单C编译器.exe
文件 283256 2009-01-08 14:31 C编译器\Debug\简单C编译器.ilk
文件 63710 2009-01-08 14:31 C编译器\Debug\简单C编译器.obj
I.A.... 347176 2009-01-08 14:31 C编译器\Debug\简单C编译器.pch
文件 484352 2009-01-08 14:31 C编译器\Debug\简单C编译器.pdb
文件 143 2009-01-08 12:47 C编译器\li.txt
文件 159 2009-01-08 13:23 C编译器\liyoubu.txt
文件 664 2009-01-07 11:49 C编译器\LR.txt
文件 31320 2009-01-08 13:20 C编译器\简单C编译器.cpp
文件 3463 2009-01-08 14:31 C编译器\简单C编译器.dsp
文件 547 2009-01-08 14:32 C编译器\简单C编译器.dsw
文件 41984 2009-01-08 14:32 C编译器\简单C编译器.ncb
文件 48640 2009-01-08 14:32 C编译器\简单C编译器.opt
文件 256 2009-01-08 14:31 C编译器\简单C编译器.plg
目录 0 2009-01-08 14:31 C编译器\Debug
目录 0 2009-01-08 14:32 C编译器
----------- --------- ---------- ----- ----
1671306 18
- 上一篇:《软件工程》课程笔记
- 下一篇:基于ansys转向节的疲劳分析
相关资源
- FTP课程设计(服务端+客户端)
- 编译原理实验工具及参考源码(lex&
- 类pascal语言编译器(编译原理实验)
- 高频电子线路课程设计报告收音机
- 直流稳压电源的课程设计、安装及调
- EDA课程设计_密码锁
- 单片机课程设计 篮球计分器
- 数据结构课程设计 6 1 彩票系统
- 端口扫描课程设计详细的报告
- 步进电机课程设计(个人设计)
- 校园网络规划与设计课程设计
- 编译原理课程设计:词法语法编译器
-
simuli
nk 课程设计 qpsk - 武汉理工大学 单片机课程设计 16*16点
- 数据库VFP课程设计
- 分页系统模拟实验 操作系统 课程设
- 中科院 编译原理 习题及解答
- 编译原理四元式和逆波兰式
- 模拟段页式虚拟存储管理中地址转换
- 硬件课程设计—流水灯(quartus软件
- 超市收银系统eclipse access大学课程设计
- 航空订票系统_数据结构课程设计
- c 课程设计 职工信息管理系统
- 汇编语言,课程设计,红绿灯
- 机床液压系统课程设计卧式钻床动力
- 课程设计蔬菜大棚自动控制系统,包
- 密码学课程设计:DES加密解密算法的
- 操作系统课程设计完整版
- 磁盘调度算法的模拟实现及对比
- 《编译原理》清华大学版中的pl0扩充
评论
共有 条评论