IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 编译原理-First集-Follow集-Select集-C++代码实现 -> 正文阅读

[C++知识库]编译原理-First集-Follow集-Select集-C++代码实现

编译原理实验需要实现First集、Follow集和Select集的求解算法,但看好多篇文章都不尽如人意,而且有些写的还有错误的地方,加大了理解的难度。于是就用C++完成了相关集合的代码实现,下面把实现过程分享给大家!

?先直接奉上代码链接,迫不及待的小伙伴可以去看啦!

CSDN:编译原理FFS.zip

码云:编译原理FFS

结构定义

struct Line {
    string from;
    vector<string> value;
    string strs;
    //整个产生式对应字符串
};

struct WenFa {
    vector<string> fzj;//非终结符
    vector<string> zj;//终结符
    string start;//开始符号
    vector<Line> rule;//产生式集合
    map<string, vector<string>> first;
    map<string, vector<string>> follow;
    map<string, vector<string>> select;
    
    void Read(string);
    vector<string> getFirst(string);
    vector<string> getFollow(string);
    void Change();
    void Print();
};

输入格式

对于如图文法,输入文件内容如下;

刚发现输入文件结尾需要多空行,暂时就不更改啦!

3
S T T'

5
a ^ ( ) ,

6
S -> a
S -> ^
S -> ( T )
T -> S T'
T' -> , S T'
T' -> ε

S

?函数运行

记住修改文件名称,否则无法读取到输入文件,还要注意文件路径位置;

全部函数代码见分享链接;

int main(int argc, char *argv[]) {
    WenFa wf;
    string path;
    if (argc > 1)
        path = *(++argv);
    else
        path = "Input.txt";
    wf.Read(path);//读文件
    wf.Change();//求集合
    wf.Print();//输出结果
    return 0;
}

运行结果

非终结符集:
S T T' 
终结符集:
a ^ ( ) , 
产生式集:
0: S -> a
1: S -> ^
2: S -> ( T )
3: T -> S T'
4: T' -> , S T'
5: T' -> ε
开始符号:
S

First Set:
 First( S ): a ^ ( 
 First( T ): a ^ ( 
 First( T'): , ε 

Follow Set:
 Follow( S ): # ) , 
 Follow( T ): ) 
 Follow( T'): ) 

Select Set:
 Select( S -> a      ): a 
 Select( S -> ^      ): ^ 
 Select( S -> ( T )  ): ( 
 Select( T -> S T'   ): a ^ ( 
 Select( T' -> , S T'): , 
 Select( T' -> ε    ): ) 

结束

编译原理相关实验内容都可以私信哦!

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-14 21:25:37  更:2021-11-14 21:28:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:56:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码