资源简介
该资源为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连续潮流
相关资源
- 04741计算机网络原理知识点整理.docx(
- 2018全国大学生计算机博弈大赛 棋谱
- GBT 15532-2008 计算机软件测试规范
- 计算机图形学 边填充算法实现代码
- 计算机图形学课设 画板
- 硕士计算机英文文献翻译(中英对比
- 20篇关于计算机的毕业设计外文翻译
- 校园网络规划与设计课程设计
- 编译原理课程设计:词法语法编译器
- 计算机专业基础综合知识
- 计算机软件工程研究生专业毕业设计
- 华北科技学院计算机系认识实习报告
- 北京邮电大学 计算机院 复试机试
- SOCKET 网络编程 计算机网络 作业 客户
- PL/0功能扩充break功能
- 简易绘图程序(计算机图形学课程设
- 公务员计算机专业考试要点整理
- 一套非常实用的综合布线方案文档(
- 计算机网络课程设计—ARQ协议模拟实
- 计算机图形学(openGL)代码
- 图形学集成程序dda、中点算法、多边
- 计算机图形实验(哈尔滨工程大学)
- 湖南省计算机等级二级考试excel题集锦
- 浙江工业大学计算机考研题
- CISCO路由器配置手册(CHM)
- Yy-z02计算机组成原理实验仪软件 V1.
- 计算机专业毕业论文--饲料销售管理系
- 基于89C51计算机锁定加密键盘设计
- 计算机网络第五版 严伟
- 计算机操作系统课后_汤小丹_第四版
评论
共有 条评论