• 大小: 20KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-04
  • 语言: 其他
  • 标签: 正规式  slr  lrr  

资源简介

编译原理的课程设计。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


评论

共有 条评论