实现LL(1)分析中控制程序(表驱动程序);完成以下描述算术表达式的LL(1) 文法的LL(1)分析程序。 G[E]: E→TE′ E′→ATE′|ε T→FT′ T′→MFT′|ε F→ (E)|i A→+|- M→*|/ 说明:终结符号i 为用户定义的简单变量,即标识符的定义。 含有程序,运行程序,实验报告。
1
北邮大三编译原理课学期内程序,注释很详细
2021-11-21 16:36:34 4KB 编译原理 语法分析 LL1文法
1
编写一个语法分析程序,对于给定的输入串,能够判断识别该串是否为给定文法的句型。1. 从键盘读入输入串,并判断正误; 2. 若无误,由程序自动构造FIRST、FOLLOW集以及SELECT集合,判断是否为LL(1)文法; 3. 若符合LL(1)文法,由程序自动构造LL(1)分析表; 4. 由算法判断输入符号串是否为该文法的句型。
2021-11-20 11:16:22 276KB LL(1) 语法分析
1
文章讨论了LL(1)语法分析器的工作原理和过程, 以具体实例说明语法定义、造表和总控程序的实现过程。 实现语言是C++
1
可读取文法文件,可消除左递归,替换:当XVN时选相应产生式的右部去替换X。此时X出栈,逆序入栈。 匹配:当XVT时它与a进行匹配,其结果可能成功,也可能失败,如果成功则符号栈中将X退栈并将输入流指针向前移动一位,否则报错。 接受:当格局为(#,空#)时报告分析成功。 报错:出错后,停止分析。并给出相应的错误提示信息。
2021-10-26 20:12:17 13KB 多功能
1
编译原理课设内容,代码可读性高,关键地方都有注释 对词法分析器各函数说明: void preInit(); //初始化关键字和关键状态 void init(); //对正规文法初始化 void inputEX(string rule); //存储三型文法进入数据结构 set Closure(FA nfa, char st); //对一个状态求闭包 set unionSet(sets1,sets2); //加入闭包结果 set e_move(FA nfa,char st, char ch); //使用子集法的move操作 bool equalSet(set s1, set s2); //使用子集法时若产生相同状态则合并 void createNFA(string express); //产生式->DFA FA createDFA(FA nfa); //NFA->DFA bool isLetter(char ch); //判断是否是数字 bool isDigit(char ch); //判断是否是字母 map getTrans(char nowNode); //从DFA中获得转换关系 Ans runDFA(string str,int pos,int line); //启动识别源程序 对语法分析器各函数说明: void init(); //对正规文法初始化 void initVt(); //初始化所有终结符 void inputEX(string rule); //存储二型文法进入数据结构 void calFisrt(); //计算FIRST集合 void calFollow(); //计算FOLLOW集合 void calSelect(); //计算SELECT集合 int get_column(string target); //得到终结符在预测分析表的列标 int get_row(string target); //得到非终结符在预测分析表的行标 void create_table(); //建立预测分析表 void print_table(); //打印预测分析表(由于预测分析表过于庞大,在程序中被注释) vector split(const string& str, const string& delim); //处理一个token void deal_tokens(); //对词法分析器得到的token表进行处理
2021-09-27 09:05:00 851KB 编译原理 词法分析 LL(1)语法分析
1
编译原理课程实验-LL(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.输出:串是否合法。
2021-06-25 11:17:43 9.65MB 编译原理 LL(1) 语法分析 计算机专业课
1
1.1目的与意义 通过设计、编制和调试一个典型的LL(1)语法分析方法,进一步掌握预测分析法的语法分析方法。 1.2主要完成的任务 (1)根据LL(1)分析法编写一个语法分析程序,输入文法的FIRST(α)和FOLLOW(U)集,由程序自动生成文法的预测分析表。 (2)所开发的程序可适用于不同的文法和任意输入串,且能判断该文法是否为LL(1)文法。 (3)对输入的任意符号串,所编制的语法分析程序应能正确判断此串是否为文法的句子(句型分析),并要求输出分析过程。 1.3使用的开发工具 Visual C++ 6.0
2021-06-20 18:09:30 1.15MB 编译课设 表驱动LL(1)语法分析程序
1
编写预测分析程序,能实现: 1. 给定文法,消除左递归及左公因子 2.构造并输出FIRST和FOLLOW(A) 3. 构造并输出分析表,判断是否为LL(1)文法 4. 任意输入一个输入串,可得到成功的分析或错误的提示,输出其分析过程或打印语法分析树。
2021-06-11 22:38:10 1.11MB 编译原理 LL(1) 语法分析器 预测分析器
1
1 实验目的 掌握 LL(1)预测分析法的基本分析原理,利用 LL(1)分析表,实现表分析的LL(1)分析器。在实验四的基础上,实现并完善 LL(1)控制程序。 2 实验内容 利用实验四构造得到的 LL(1)预测分析表,分析一个输入语句。 (可以分别选择一个正确的语句和一个错误的语句) ,输出具体的分析过程。 (输出形式类似于 ppt 中讲解的例题) 例题为: G[E]: E → TE′ E′→ +TE′|ε T → FT′ T′→∗ FT′|ε F → (E)|i 3 开发环境 c语言 win10 vs2019 4 参考书籍 《编译教程(第四版)》胡元义 5 只提供参考,不支持抄袭 6 包括LL(1)分析表的自动生成
2021-05-25 13:03:55 13KB 编译原理 预测分析表 LL(1) 语法分析