资源简介
编译原理 课程设计 小子集程序 南工大计软
代码片段和文件信息
#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转向节的疲劳分析
相关资源
- 实验二 实现一门语言的词法分析器
- 编译原理课程设计报告_算符优先分析
- 超市会员管理系统的设计与实现
- 软件工程课程设计 基于Web汽车租赁系
- 编译原理 语法分析、语义分析综合实
- 编译原理SLR1分析
- 游泳馆会员管理系统课程设计
- 哈工大软件学院编译原理语法分析源
- 汇编语言课程设计实验报告——拼图
- 2013集美大学编译原理部分考试题目
- 编译原理词法、语法、语义分析器
- 数字秒表--EDA课程设计完整版(设计报
- 数据库课程设计报告仓库管理系统
- 传感器与检测技术课程设计---光电式
- WHILE循环语句的翻译程序设计.zip
- 数据结构课程设计内部排序算法比较
- 单片机水塔水位控制系统课程设计p
- 编译原理词法分析程序代码
- 湖南农大-编译原理2010期末考试试卷
- 编译原理实验 语义分析与中间代码
- 编译原理 语法分析器
- 数据库系统课程设计-仓库管理系统
- 编译原理目标代码
- 无符号数的词法分析程序
- 编译原理实验代码四则表达式编译及
- 西安电子科技大学编译原理大作业C
- 河北工业大学编译原理实验
- 计算机网络课程设计 小型校园网的构
- 编译原理课程设计——编译器
- Labview课程设计低通滤波器及报告
评论
共有 条评论