资源简介
该资源为2016级哈工程计算机专业的编译原理课程设计的代码与实验报告。其中共选择了以下实验:
1实验环境的使用
2使用Lex自动生成扫描程序
3消除左递归(无替换)
4 提取左因子
5 First集合
6 Follow集合
代码片段和文件信息
#include “RegexpToNFA.h“
#include “RegexpToPost.h“
#include “NFAFragmentStack.h“
NFAFragmentStack FragmentStack; // 栈。用于储存 NFA 片段
//char* regexp = “ab“; // 例 1
// char* regexp = “a|b“; // 例 2
// char* regexp = “a*“; // 例 3
// char* regexp = “a?“; // 例 4
// char* regexp = “a+“; // 例 5
// char* regexp = “a(a|1)*“;// 例 6
char* regexp = “(aa|b)*a(a|bb)*“;// 例 7
// char* regexp = “(a|b)*a(a|b)?“; // 例 8
int main(int argc char **argv)
{
char *post;
NFAState *start;
//
// 初始化栈
//
InitNFAFragmentStack(&FragmentStack);
//
// 调用 re2post 函数将正则表达式字符串转换成解析树的后续遍历序列
//
post = re2post(regexp);
//
// 调用 post2nfa 函数将解析树的后续遍历序列转换为 NFA 并返回开始状态
//
start = post2nfa(post);
system(“pause“);
return 0;
}
/*
功能:
初始化一个状态。
返回值:
状态指针。
*/
int nstate = 1; // 状态名计数器
NFAState* CreateNFAState()
{
NFAState *s = (NFAState*)malloc(sizeof(NFAState));
s->Name = nstate++;
s->Transform = ‘\0‘;
s->Next1 = NULL;
s->Next2 = NULL;
s->AcceptFlag = 0;
return s;
}
/*
功能:
将开始状态和接受状态组成一个 Fragment。
参数:
StartState -- 开始状态。
AcceptState -- 接受状态。
返回值:
Fragment 结构体指针。
*/
NFAFragment MakeNFAFragment(NFAState *StartState NFAState *AcceptState)
{
NFAFragment n = {StartState AcceptState};
return n;
}
/*
功能:
将解析树的后序序列转换为 NFA。
参数:
postfix -- 解析树的后序序列指针。
返回值:
NFA 的开始状态指针。
*/
/*
typedef struct _NFAState{
char Transform; // 状态间转换的标识,用 ‘$‘ 表示 ‘ε-转换‘
struct _NFAState *Next1; // 指向下一个状态
struct _NFAState *Next2; // 指向下一个状态
int Name; // 状态名称
int AcceptFlag; // 是否为接受状态的标志,1 表示是接受状态 0 表示不是接受状态
}NFAState;
// Fragment 结构是一个 NFA 的片段
typedef struct _NFAFragment{
NFAState *StartState; // 开始状态
NFAState *AcceptState; // 接受状态
}NFAFragment;
*/
const char VoidTrans = ‘$‘; // 表示空转换
NFAState* post2nfa(char *postfix)
{
char *p; // 游标
NFAFragment fragment1 fragment2 fm; // NFA 片段结构体变量
NFAFragment fragment = {0 0}; // 初始化用于返回的 NFA 片段
NFAState *NewStartState *NewAcceptState; // 开始状态和接受状态指针
//
// TODO: 在此添加代码
//
for(p=postfix;*p!=‘\0‘;p++)
{
switch(*p)
{
default: //构造单字符NFA片段
//调用CreatNFAState函数生成两个新的状态
NewStartState = CreateNFAState();
NewAcceptState = CreateNFAState();
//开始状态通过单个字符转换到接受状态
NewStartState->Transform = *p;
NewStartState->Next1 = NewAcceptState;
NewAcceptState->AcceptFlag = 1;
//调用MakeFragment函数生成一个新的NFA片段,并入栈
fm = MakeNFAFragment(NewStartStateNewAcceptState);
PushNFAFragment(&FragmentStackfm);
break;
case ‘.‘: //构造连接NFA片段
/*
连接状态不需要生成新的状态,第一个在接受状态就是第二个的开始状态
*/
//栈顶在两个片段出栈,构造出新的NFA片段
fragment2 = PopNFAFragment(&FragmentStack);
fragment1 = PopNFAFragment(&FragmentStack);
fragment1.AcceptState->AcceptFlag = 0;//将状态1在接受状态换成非接受状态,通过e转换与状态2进行连接
fragment1.AcceptState->Next1 = fragment2.StartState;//状态1在下一状态指针指向状态2
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2020-08-07 21:05 2016061521-王好天-编译原理\
目录 0 2018-12-25 16:22 2016061521-王好天-编译原理\lab1实验一\
目录 0 2018-12-25 16:22 2016061521-王好天-编译原理\lab1实验一\Debug\
文件 31439 2018-12-24 15:50 2016061521-王好天-编译原理\lab1实验一\Debug\lab1实验一.exe
文件 8132 2018-12-24 15:50 2016061521-王好天-编译原理\lab1实验一\Debug\main.o
文件 4874 2018-12-17 16:14 2016061521-王好天-编译原理\lab1实验一\Debug\NFAFragmentStack.o
文件 5500 2018-12-17 16:14 2016061521-王好天-编译原理\lab1实验一\Debug\RegexpToPost.o
文件 1015 2018-12-24 16:19 2016061521-王好天-编译原理\lab1实验一\Debug\ValidateSource.txt
文件 1015 2018-12-24 16:19 2016061521-王好天-编译原理\lab1实验一\Debug\ValidateTarget.txt
文件 2079 2018-12-24 15:50 2016061521-王好天-编译原理\lab1实验一\lab1实验一.cplproj
文件 472 2018-12-24 16:21 2016061521-王好天-编译原理\lab1实验一\lab1实验一.puo
文件 7193 2018-12-24 15:50 2016061521-王好天-编译原理\lab1实验一\main.c
文件 1085 2013-06-08 15:02 2016061521-王好天-编译原理\lab1实验一\NFAFragmentStack.c
文件 753 2013-06-08 14:58 2016061521-王好天-编译原理\lab1实验一\NFAFragmentStack.h
文件 982 2013-07-08 16:52 2016061521-王好天-编译原理\lab1实验一\RegexpToNFA.h
文件 1581 2018-12-17 09:36 2016061521-王好天-编译原理\lab1实验一\RegexpToPost.c
文件 292 2013-05-27 10:51 2016061521-王好天-编译原理\lab1实验一\RegexpToPost.h
目录 0 2018-12-25 16:22 2016061521-王好天-编译原理\lab3实验三\
目录 0 2018-12-25 16:22 2016061521-王好天-编译原理\lab3实验三\Debug\
文件 42537 2018-12-24 15:51 2016061521-王好天-编译原理\lab3实验三\Debug\lab3实验三.exe
文件 29302 2018-12-24 09:17 2016061521-王好天-编译原理\lab3实验三\Debug\main.o
文件 638 2013-07-18 14:41 2016061521-王好天-编译原理\lab3实验三\define.h
文件 2364 2018-12-24 15:51 2016061521-王好天-编译原理\lab3实验三\lab3实验三.cplproj
文件 282 2018-12-25 14:08 2016061521-王好天-编译原理\lab3实验三\lab3实验三.puo
文件 35 2018-12-21 15:53 2016061521-王好天-编译原理\lab3实验三\lex.backup
文件 45699 2018-12-24 09:17 2016061521-王好天-编译原理\lab3实验三\main.c
文件 269 2013-07-18 14:41 2016061521-王好天-编译原理\lab3实验三\sample.txt
文件 6489 2018-12-19 14:14 2016061521-王好天-编译原理\lab3实验三\scan.txt
目录 0 2018-12-25 16:22 2016061521-王好天-编译原理\lab4实验四\
目录 0 2018-12-25 16:22 2016061521-王好天-编译原理\lab4实验四\Debug\
文件 308204 2018-12-24 09:13 2016061521-王好天-编译原理\lab4实验四\Debug\lab4实验4.exe
............此处省略38个文件信息
- 上一篇:南方cass,CAD2006版本的勘界测量补丁
- 下一篇:case39连续潮流
相关资源
- 国科大计算机学院王伟强图像处理期
- 计算机组成原理(白中英)本科生试
- 哈工大计网mooc答案,包含测验和期末
- 编码的奥秘-隐匿在计算机背后的软硬
- 汇编课件PPT全配套清华大学计算机系
- 新编计算机组成原理习题与解析 李春
- 华科秦磊华计算机组成原理ppt
- 计算机软件工程 学生考试系统 课程设
- 网管员典藏书架 网络管理与运维实战
- 南开大学计算机专硕考研真题
- 计算机专业英语文章翻译
- 计算机应用基础课程标准
- 大学计算机基础课件免费
- 计算机文化基础项目教程(windows7+o
- 计算机应用基础教案带word、excel
- 计算机控制技术.东南大学自动化学院
- “昌”字效应——对民间
- 鼠标图标291个cur格式的很有意思
- 2019年国家公务员考试《银保监会专业
- 内蒙古工业大学 计算机网络试题A含答
- 计算机考研复试各科讲义.zip
- 2020王道考研——计算机网络PPT.rar
- 未来教育考试系统(免激活)
- 具体数学 计算机科学基础第2版中英文
- GPU精粹1-中文版.pdf《GPU精粹:实时图形
- 计算机图形学 基于3D图形开发技术
- 微型计算机原理与接口技术南邮.zip
- 计算机联锁6502仿真控制台平面
- 高级计算机网络实验报告 ns3模拟数据
- 计算机组成原理课程设计报告.rar计算
评论
共有 条评论