北邮编译原理课程设计
2019-12-21 20:32:41 123KB 北邮编译原理
1
代码生成器。它依次把每条中间代码变换成目标代码,并且在一个基本块范围内考虑如何充分利用寄存器的问题。
2019-12-21 20:30:00 141KB 代码生成
1
优秀作品放心下载,绝对不会后悔的,本人是15级本科生
2019-12-21 20:27:45 430KB C-
1
可能对你的学习有帮助 1、增加 != 运算 2、增加保留字(没有相应的算法实现) 3、增加对if a then b else c的语法、语义及实现 4、更改保留字TIMESEQLSYM/SLASHEQLSYM为TIMESEQL/SLASHEQL,保留字数量更改。并实现*=、/=的功能。 5、实现了FOR的2种功能TO与DOWN。 6、实现了对典型语言 ++ -- 的实施。 注:本来,这个功能的增加是需要在FACTOR里面进行扩充的,但是因为时间问题,所以只是在STATEMENT中进行了对后++/--的运算,而并没有完整地实现这个功能。有时间的话,可以自己修改之。 7、增加单字符 CHAR。 8、增加实数类型 REAL 及其运算。 注:问题1:如果进行READ()函数操作的时候会出错,所以就没有进行READ()的例子。问题2:对数值的位数没有进行截断。
2019-12-21 20:26:29 1.67MB 编译原理
1
自己做编译课程设计写的一个很简单的C编译器,用的是LEX+YACC写的,方法比较新,由于时间的关系写的不是很完善,但是要扩充的话比较容易。压缩包中附LEX&YACC的语言详解,相信对于对编译有兴趣的人有些帮助。
2019-12-21 20:25:06 405KB 编译原理 YACC LEX
1
北航编译原理2013年课程设计作业,源代码+要求文法+测试代码 文法 pl0, 模板是参考网上大部分的,自己找找就能找到类似的,参考课程要求的文法对原模板进行了修改,而且加了比较详细的注释,适用于北航学生进行课程学习和参考,在vc 6++和vs2012下均可顺利编译运行。 test里的是同学共享的代码,均可以进行简单的修改已检验测试结果。进攻学习参考,禁止抄袭
2019-12-21 20:23:17 25KB 编译器 pl0 北航 编译原理
1
java编程 含有界面 以及完整代码 〈程序〉→ main()〈语句块〉 〈语句块〉→{〈语句串〉} 〈语句串〉→〈语句〉;〈语句串〉|〈语句〉; 〈语句〉→〈赋值语句〉|〈条件语句〉|〈循环语句〉 〈赋值语句〉→ ID =〈表达式〉; 〈条件语句〉→ if〈条件〉〈语句块〉 〈循环语句〉→ while〈条件〉〈语句块〉 〈条件〉→(〈表达式〉〈关系符〉〈表达式〉) 〈表达式〉→〈表达式〉〈运算符〉〈表达式〉|(〈表达式〉)|ID|NUM 〈运算符〉→+|-|*|/ 〈关系符〉→<|<=|>|>=|=|!> word.wordList包(存储了关键字): word:此类是定义了存储关键字的结构:包括String型的关键字,和int型的识别符。 wordList:此类存储了29个关键字,在构造函数中初始化。 2、word包(进行词法分析)中: basicFunction:此类定义了做词法分析的基本函数: GetChar()将下一输入字符读到ch中,搜索知识器前移一个字符位置 GetBC();检查ch中的字符是否为空白。若是,则调用GetChar直至不 是字符为止 Concat();将ch中的字符连接到strToken之后 IsLetter();判断ch中的字符是否为字母 IsDigit();判断ch中的字符是否为数字 Reserve();对strToken中的字符创查找保留字表,若是则返回它的编码,否则返回0 Retract();将搜索指示器回调一个字符位置 RetractStr();将strToken置空 lexAnalysis:此类是用来进行词法分析,将分析后的单词存入word数组中,(注:在词法分析中,若是一串字母,则认为是ID,若是数字,则认为是NUM。存储的时候识别符分别存ID与NUM的识别符,但是内容仍然是自己的内容) 其中的wordAnalysis函数就是词法分析函数(具体实现请看后面的重要函数分析) 3、stack包(定义栈)中: 栈是通过链表来定义的,因此 StringListElement:次类定义了链表的每一个节点 StringStrack:此类定义了栈,其中有长度属性,有函数: Top();用来取得栈顶 Push();压栈 Pop();出栈 4、sentence包(语法分析)中: juzi :定义了文法的句子的结构:key(左边部分) content[](右边推出的部分) lo(长度) grammar :存储了文法的27个关系式 AnalysisFB :定义了分析表的存储结构 AnalysisF :存储分析表 SentenceAnalysis :语法分析 JuProduction(word w):此函数是用来判断在当前栈与输入串的情况下,用哪一个产生式,返回产生式在数组中的下标 若输入串的第一个字符与栈顶字符相同则表示可以规约,则返回-1; 若不能过用产生式,则返回-2; AnalysisBasic(word w):此函数是分布进行语法分析,对栈操作 * 根据所需要的产生式对符号栈进行操作 * 返回0表示规约;返回1表示移进;否则表示输入串不是文法的句子 5.Main包(主界面)中 Main:此类定义了图形界面
2019-12-21 20:22:06 3.25MB 词法分析器及语法分析器
1
(1)Lex输入文件的解析: ·主函数main()实现对Lex输入文件结构的解析 ·int checkType(char c)函数判断是定义段开始?定义段结束?规则段? (2)正规表达式的解析: ·void replaceID(string &re)函数将用户标示id转换成re ·通过对正规表达式的解析的解析可以将规则段的模式部分全部转换成正规表达式 (3)一个正规表达式到NFA的转换算法的实现 ·void generateNFA(const string & re,vector &tnfa,vector &isTer,int index)函数完成正规表达式到NFA的转换 其中:re:正规表达式 tnfa:数据结构是vector,即NFA的每个结点是list (关于NFA的数据结构的描述见后面) isTer:统计tnfa中接受状态结点(isTer[i]!=0表示结点i为接受态) (3)多个NFA的合并 ·void joinNFA(vector &nfa1,const vector &nfa2) 函数完成了NFA nfa1和nfa2的合并,从总体来看起到所有NFA的合并 ·合并NFA的基本原理:将nfa2的开始的点中的内容全部拷贝给nfa1的开始结点然后,再把nfa2中除了开始点以外的点连接到nfa1的末尾即可,注意结点编号的变化 (4)NFA的确定化算法的实现 ·void TODFA()函数完成NFA到DFA的转换 ·在进行NFA确定化算法的同时,自动机的接受态集合也做相应的变换 vector nfaIsTer vector dfaIsTer
1
报告,源程序,测试用例都有,完整版 报告目录: 一、设计目的和要求 二、设计概述 三、结构设计说明 四、主要成分描述 五、测试用例(截图说明等) 六、开发过程和完成情况 七、总结与体会(自评)
2019-12-21 20:13:14 537KB 编译原理 课程设计 PL0 实验报告
1
编译原理课程设计,面向PASCAL语言 在C++BUILD下运行PL01.~bpr 其中实现代码在Unit1.~cpp 测试用例是用PASCAL写的,可以自己写测试用例
2019-12-21 20:07:50 388KB pl0 pascal
1