• 大小: 85KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-07-31
  • 语言: 其他
  • 标签: SyntaxAnalyz  

资源简介

LL(1)文法分析程序,内含输入文件、输出文件、readme帮助文件、程序源码及exe运行程序,程序整个过程为:读入源码,消除直接左递归,消除直接左公共因子,求First集,求Follow集,构建分析表,分析过程。供大家交流学习。

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;

#define T 0 //终结符
#define N 1 //非终结符

//文件名、路径
#define ErrorLog “.\\输出文件\\Error.log“
#define AnalyzeProcesstxt “.\\输出文件\\分析过程.txt“
#define SyntaxRuletxt “语法规则.txt“
#define FirstFollowtxt “.\\输出文件\\First集和Follow集.txt“
#define Tokenstxt “tokens.txt“
#define AnalyzeTabletxt “.\\输出文件\\分析表.txt“

typedef string StartSymble;


//重载 == 运算符
bool operator==(const list& left const string& right)
{
if (left.front() == right)
return true;
else
return false;
}

//重载 == 运算符 list比较
bool operator==(list left list right)
{
typedef list::iterator IteratorList;
IteratorList itListLeft = left.begin();
IteratorList itListRight = right.begin();
if (left.size() != right.size())
return false;
else
{
while (itListLeft != left.end())
{
if (*itListLeft == *itListRight)
itListLeft++ itListRight++;
else
return false;
}
return true;
}
}

//list由 | 分段
list> DevideList(list List)
{
typedef list::iterator IteratorList;
IteratorList itList;
list> NewP; //根据 | 分段后的右部
list Segment; //用来存放分段
itList = List.begin();
while (itList != List.end())
{
if (*itList != “|“)
Segment.push_back(*itList);
else
{
NewP.push_back(Segment);
Segment.clear();
}
itList++;
if (itList == List.end())
NewP.push_back(Segment);
}
return NewP;
}

//合并函数
list CombineLists(list> LL)
{
bool Eif = false; //是否有ε
typedef list>::iterator IteratorLL;
IteratorLL itLL = LL.begin();
list newone;
while (itLL != LL.end())
{
if (*itLL == “ε“)
{
Eif = true;
itLL++;
continue;
}
typedef list::iterator IteratorList;
IteratorList itList = itLL->begin();
while (itList != itLL->end())
{
newone.push_back(*itList);
itList++;
}
newone.push_back(“|“);
itLL++;
}
if (Eif)
newone.push_back(“ε“);
if (newone.back() == “|“) //去除多余的或
newone.pop_back();
return newone;
}
list CombineLists(list left list right)
{
// cout << “合并list“ << endl;
typedef list::iterator IteratorList;
IteratorList itList = right.begin();
while (itList != right.end())
{
bool AlreadyHave = false;
IteratorList itList2 = left.begin(); //用来判断是否已有某个符号
while (itList2 != left.end())
{
if (*itList2 == *itList) //已有符号
AlreadyHave = true;
itList2++;
}
if(!AlreadyHave) //非已有符号才加入
left.push_back(*itList);
itList++;
}
return left;
}
set CombineSets(set left set right)
{
typedef set::iterator IteratorSet;
IteratorSet itSet = right.begin();
while (itSet != right.end())
{
left.insert(*itSet);
itSet++;
}
return

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      38535  2018-11-20 11:56  SyntaxAnalyzer.cpp

     文件     535552  2018-11-20 11:56  SyntaxAnalyzer.exe

     文件         50  2018-11-20 11:31  tokens.txt

     文件        123  2018-11-20 11:25  语法规则.txt

     文件         56  2018-11-20 11:49  输出文件\Error.log

     文件        374  2018-11-20 11:49  输出文件\First集和Follow集.txt

     文件        441  2018-11-20 11:49  输出文件\分析表.txt

     文件       2707  2018-11-20 11:49  输出文件\分析过程.txt

     文件        643  2018-11-20 12:07  ReadMe.txt

     目录          0  2018-11-20 11:56  输出文件

----------- ---------  ---------- -----  ----

               578481                    10


评论

共有 条评论

相关资源