资源简介
编译原理的课程设计。dfascan.cpp:输入一个正规式,并输入一个字符串,判断输入的字符串是否符合此正规式的语法规则。其他两个文件,是关于llr和slr文法的设计的
代码片段和文件信息
/***********************************************************
Copyright (c) 2004 RM.RYT. All rights reserved.
Developed in Microsoft Visual C++ 6.0 Enterprise Edition.
***********************************************************/
#include
#include
#include
#include
#include
#include
/////////////////////////////////////////////////
#define NULL 0
#define LStack linkedStack
/////////////////////////////////////////////////
// 链式栈类的前视定义
template
class linkedStack;
/////////////////////////////////////////////////
// 定义链式栈结点类
template
class StackNode
{
friend class linkedStack;
private:
T data;
StackNode *next;
StackNode(T item = 0 StackNode *p = NULL)
{
data = item;
next = p;
}
};
/////////////////////////////////////////////////
// 定义链式栈类
template
class linkedStack
{
private:
StackNode *top;
public:
linkedStack();
~linkedStack();
bool IsEmpty(void) const;
int Length(void) const;
void Push(const T &item);
T Pop(void);
T GetTop(void);
void Clear(void);
};
// 构造函数
template
linkedStack::linkedStack()
{
top = NULL;
}
// 析构函数
template
linkedStack::~linkedStack()
{
Clear();
}
// 判断栈是否为空
template
bool linkedStack::IsEmpty(void) const
{
return (! top);
}
// 获取队列的长度
template
int linkedStack::Length(void) const
{
StackNode *temp = new StackNode();
temp = top;
int length = 0;
while (temp)
{
temp = temp->next;
length++;
}
return length;
}
// 压入数据(入栈)
template
void linkedStack::Push(const T &item)
{
top = new StackNode(item top);
}
// 抽出数据(出栈)
template
T linkedStack::Pop(void)
{
if (! IsEmpty())
{
StackNode *temp = top;
top = top->next;
T value = temp->data;
delete temp;
return value;
}
else
{
//cout<< “Stack Already Empty!“ << endl;
getch();
exit(1);
}
}
// 获取栈头数据
template
T linkedStack::GetTop(void)
{
if (! IsEmpty())
{
return top->data;
}
else
{
//cout << “Stack Already Empty!“ << endl;
getch();
exit(1);
}
}
// 设置栈为空栈
template
void linkedStack::Clear(void)
{
StackNode *temp = new StackNode();
while (top)
{
temp = top;
top = top->next;
delete temp;
}
}
/////////////////////////////////////////////////
// 定义邻接表的边表类
class Edge
{
public:
int number;
int position;
char weight;
Edge *link;
Edge();
Edge(int num int pos char ch);
};
Edge::Edge()
{
number = -1;
position = -1;
link = NULL;
}
Edge::Edge(int num int pos char ch)
{
number = num;
position = pos;
weight = ch;
link = NULL;
}
/////////////////////////////////////////////////
// 定义邻接表的顶点类
class Vertex
{
public:
int number;
Vertex *next;
Edge *out;
Vert
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 26043 2017-12-18 22:25 编译原理正规式匹配\DFAScan.cpp
文件 26031 2017-12-16 15:54 编译原理正规式匹配\LL1Grammar.cpp
文件 30211 2017-12-16 16:06 编译原理正规式匹配\SLRGrammar.cpp
目录 0 2017-12-20 12:23 编译原理正规式匹配
----------- --------- ---------- ----- ----
82285 4
- 上一篇:蓝牙模块AT指令集
- 下一篇:MSP430驱动SD卡程序
相关资源
- 正规文法转正规式+正规式NFA完整可运
- lalr1,ll1slrlr编译器的构造
- 编译原理中正规式转化为nfa
- 编译原理实验四:正规式到正规文法
- 编译原理实验三:正规文法到正规式
- ISLR和Hands-On Machine Learning with Scikit-L
- 从正则文法构造有穷状态自动机实验
- 正规式1(0|1)*101相应的DFA.doc
- Sample语言编译器(词法分析、正规式
- 有穷自动机转化为正规式
- 编译原理自底向上分析法
- 正规式到有穷自动机源代码
- 编译原理slr(1)文法的判定及其分析
- Thompson转换正规式为NFA.zip
- SLR1语法分析器
- 编译原理课程设计--SLR1分析器
评论
共有 条评论