编译实验中求一文法的first集和follow集
2023/12/5 12:31:55 51KB first集 follow集 编译实验
1
实验目的:1.了解LL(1)语法分析是如何根据语法规则逐一分析词法分析所得到的单词,检查语法错误,即掌握语法分析过程。
2.掌握LL(1)文法判别调剂和LL(1)语法分析器的设计与调试。
实验内容:针对任意的文法,编写相应的左递归消除、左公共因子提取程序,求解相应的FIRST、FOLLOW集,构造预测分析表,并编写LL(1)语法分析程序,并给出测试句子的分析过程。
(注:左递归消除和左公共因子如果在实验三里做了,可以直接拿过来用)判断LL(1)文法部分:1.输入:文法2.处理:左递归消除、左公共因子提取,FIRST、FOLLOW等集合构造,判断LL(1)3.输出:是LL(1)的情况输出预测分析表,否则判断不是LL(1)LL(1)分析程序部分:1.输入:诸如对应文法的符号串,以$结束。
2.处理:基于分析表进行LL(1)语法分析,判断其是否符合文法。
3.输出:串是否合法。
三、实验要求1.构建合适的数据结构来表示文法符号和文法规则。
2.设计恰当的数据结构存储预测分析表。
(ε可用#代替)3.任选C/C++/Java或其他高级语言中的一种作为编程语言,要求所编程序结构清晰。
2023/12/3 18:40:57 4KB 11(1)分析
1
语言为C++,使用了set,map容器,输入格式:S->Aa|g|e,支持多‘|’符号,采用文件输入
2023/11/14 21:26:19 14KB 编译原理实验 first集 follow LL1文法
1
课程大纲每节课资料提前5天发放第1章本节大纲”破解“算法面试"Hack"theAlgorithmInterview算法面试究竟考什么史上最全的算法面试考点大全2013-2018面试难度变化如何在最有效率的准备算法面试如何在不押题的情况下更有信息的去面试2018/6/24上午9:30:00第2章本节大纲二分与LogN算法BinarySearch&LogNAlgorithm二分法三重境界二分位置之满足条件的第一次-BinarySearchonIndex-OOXX二分位置之保留一半-BinarSearchonIndex-Halfhalf二分答案-BinarySearchonResult学习BinarySearch的通用模板,不再死循环讲解SearchinRotatedSortedArray等10道高频二分搜索题2018/7/1上午9:30:00第3章本节大纲为面试而生的双指针算法TwoPointersAlgorithmTwoSum问题及他的各种扩展TwoSum&Follow-ups其他高频的双指针问题2018/7/2上午9:30:00第4章本节大纲宽度优先搜索和拓扑排序BFS&TopologicalSorting二叉树上的宽搜BFSinBinaryTree二叉树的序列化问题BinaryTreeSerialization图上的宽搜BFSinGraph拓扑排序TopologicalSorting棋盘上的宽搜BFSinChessboard2018/7/15上午9:30:00第5章本节大纲基于树的深度优先搜索Tree-basedDFS二叉树的深度优先遍历BinaryTreeDFSTraversal先序/中序/后序Preorder/inorder/postorder二叉树中的分治算法Divide&ConquerDFS模板IntroduceDFSTemplate二叉树高频面试问题递归三要素遍历算法与分治算法对比TraversevsDivideConquer2018/7/16上午9:30:00第6章本节大纲基于组合的深度优先搜索Combination-basedDFS组合类深搜CombinationDFS排列类深搜PermutationDFS图上的深搜GraphDFS非递归的深搜实现方法Non-Recursion2018/7/22上午9:30:00第7章本节大纲基于排列、图的深度优先搜索Permutation/GraphbasedDFSTBD2018/7/23上午9:30:00第8章本节大纲数据结构-栈,队列,哈希表与堆Stack,Queue,Hash&Heap哈希表Hash常用的哈希库的区别HashSetvsHashMapvsHashTable哈希表的实现原理BasicHashKnowledge哈希函数HashFunction冲突的解决方法Collision开散列OpenHashing闭散列ClosedHashing哈希扩容Rehashing哈希表高频面试题HighFrequentlyAskedHashQuestions堆堆的基本原理BasicHeapKnowledge优先队列与堆的联系和区别PriorityQueuevsHeap堆的高频面试题HighFrequentlyAskedHeapQuestions堆的代替品:TreeMap2018/7/29上午9:30:00第9章本节大纲数据结构-区间、数组、矩阵与树状数组Interval,Array,Matrix&BinaryIndexedTree数组Array子数组及相关面试题Subarray&RelatedQuestions其他高频数组问题HighFrequentAskedArrayQuestionsTBD2018/7/30上午9:30:00课程更新日志
2023/10/26 20:27:35 2.24MB 编程 算法 九章算法 动态规划
1
第三次上机—语法分析1目的:熟练掌握自上而下的语法分析方法,并能用C++程序实现。
要求:1.使用的文法如下: E®TE¢ E¢®+TE¢|e T®FT¢ T¢®*FT¢|e F®(E)|id2.对于任意给定的输入串(词法记号流)进行语法分析,递归下降方法和非递归预测分析方法可以任选其一来实现。
3.要有一定的错误处理功能。
即对错误能提示,并且能在一定程度上忽略尽量少的记号来进行接下来的分析。
可以参考书上介绍的同步记号集合来处理。
可能的出错情况:idid*id,id**id,(id+id,+id*+id……4.输入串以#结尾,输出推导过程中使用到的产生式。
例如:输入:id+id*id#输出:E®TE¢T®FT¢F®idE¢®+TE¢T®FT¢……如果输入串有错误,则在输出中要体现是跳过输入串的某些记号了,还是弹栈,弹出某个非终结符或者是终结符了,同时给出相应的出错提示信息。
比如:idid*id对应的出错信息是:“输入串跳过记号id,用户多输入了一个id”;
id**id对应的出错信息是:“弹栈,弹出非终结符F,用户少输入了一个id”(id+id对应的出错信息是:“弹栈,弹出终结符),用户少输入了一个右括号(或者说,括号不匹配)”有余力的同学可进一步考虑如下扩展:1. 将递归下降方法和非递归预测分析方法都实现2. 在语法分析的过程中调用第二次上机的结果,即利用词法分析器来返回一个记号给语法分析器。
3. 编写First和Follow函数,实现其求解过程。
测试文法:A->BCDEB->aBA|εC->F|εD->b|c|εE->e|εF->d|ε
2023/9/19 0:58:21 10KB 递归 LL(1) 自上而下
1
1.使用如下文法: E®E+T|T T®T*F|F F®(E)|id2.对于任意给定的输入串(词法记号流)进行语法分析,要求采用LR分析器来完成。
手工构造LR分析表,利用移进-归约分析算法(P71图3.12)输出(P73表3.8)对应的动作部分。
如:输入:id*+id/(id+id)#输出:移进按F->id归约按T->F归约移进error……3.要有一定的错误处理功能。
即对错误能提示,并且能在一定程度上忽略尽量少的记号来进行接下来的分析。
例如:从状态0开始的记号流为:bm将b移进之后,栈里的情况应该为:0b2此时查表发现action[2,m]=error输出打印:error把A和状态1相继压入栈,用户指针后移到FOLLOW(A)对应的元素继续分析。
4.利用P94页的表3.13的方式将错误进行分类提示,即给出具体的出错信息。
扩展:在已有文法的基础上再加上减法“-”和除法“/”对应的产生式构成最终的文法。
从而使得记号流可以处理带括号的加、减、乘、除四则运算。
2023/8/20 23:55:43 6KB 编译原理
1
编译原理LL1文法的mfc实现,其中包括对LL1文法的First集合的算法,Follow集合的算法select集合的算法还包括消除左递归提取左因子
2023/8/1 23:46:21 10.78MB LL1文法 mfc 左递归 左因子
1
C#2010完整开发编译原理(词法分析+LL(1)分析),词法分析实现输入代码自动标识关键字(该颜色,智能编程环境,不限语言),LL(1)分析实现输入文法,求解FIRST,FOLLOW集,得出预测分析表,匹配字符串。
2023/6/30 4:56:54 112KB 编译原理
1
利用First集,Follow集,预测分析表以及先进后出栈来实现LL(1)文法的分析程序,以及判别某个串是否属于当前文法的范畴,内含c++源代码和实验报告说明
2023/6/1 12:52:36 3.1MB 编译原理 上下文无关文
1
编译原理课程方案。



约莫的FIRST集FOLLOW集求解的法度圭表标准。



收缩文档中ffs.cpp为源法度圭表标准。



使用了bool。



所以做了cpp。



Production文本是供法度圭表标准使用的暴发式。



其余的是进程文件。



能够漠视。



2023/4/21 20:21:25 48KB 编译原理
1
共 37 条记录 首页 上一页 下一页 尾页
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡