燕山大学信息科学与工程学院软件工程编译原理实验报告
2020-01-03 11:16:57 351KB 编译原 实验报
1
设计内容及要求: 自己定义一个简单程序设计语言的单词集及其编码规则,并把词 法分析器构造出来。 保留字的识别按标识符一样识别,通过查找保留字表区分是保留字还是标识符。 程序能够从用户输入的源程序中,识别出的单词符号,并用二元式表示,显示输出或输出到文件中
2020-01-03 11:15:52 233KB sh
1
编译原理实验报告-语法分析-递归下降分析法,完整实验报告,有截图。
2019-12-21 22:25:41 109KB 递归下降
1
这是一个预测分析法的实验报告,内含源代码+运行结果,完整的实验报告,该程序能够对句子进行分析,并输出分析过程,希望对大家有所帮助。
1
编译原理实验报告+语法分析++语义分析++词法分析+详细的源程序
1
附录c 编译程序实验 实验目的:用c语言对一个简单语言的子集编制一个一遍扫描的编译程序,以加深对编译原理的理解,掌握编译程序的实现方法和技术。 语法分析 C2.1 实验目的 编制一个递归下降分析程序,实现对词法分析程序所提供的单词序列的语法检查和结构分析. C2.2 实验要求 利用C语言编制递归下降分析程序,并对简单语言进行语法分析. C2.2.1待分析的简单语言的语法 实验目的 通过上机实习,加深对语法制导翻译原理的理解,掌握将语法分析所识别的语法成分变换为中间代码的语义翻译方法. 实验要求 采用递归下降语法制导翻译法,对算术表达式、赋值语句进行语义分析并生成四元式序列。 实验的输入和输出 输入是语法分析提供的正确的单词串,输出为三地址指令形式的四元式序列。 例如:对于语句串 begin a:=2+3*4;x:=(a+b)/c end# 输出的三地址指令如下: (1) t1=3*4 (2) t2=2+t1 (3) a=t2 (4) t3=a+b (5) t4=t3/c (6) x=t4 算法思想 1设置语义过程 (1) emit(char *result,char *arg1,char *op,char *ag2) 该函数功能是生成一个三地址语句送到四元式表中。 四元式表的结构如下: struct {char result[8]; char ag1[8]; char op[8]; char ag2[8]; }quad[20]; (2)char *newtemp() 该函数回送一个新的临时变量名,临时变量名产生的顺序为T1,T2,…. Char *newtemp(void) { char *p; char m[8]; p=(char *)malloc(8); k++; itoa(k,m,10); strcpy(p+1,m); p[0]=’t’; return(p); } (2)主程序示意图如图c.10所示。 (2) 函数lrparser在原来语法分析的基础上插入相应的语义动作:将输入串翻译成四元式序列。在实验中我们只对表达式、赋值语句进行翻译。 语义分析程序的C语言程序框架 int lrparser() { int schain=0; kk=0; if(syn=1) { 读下一个单词符号; schain=yucu; /调用语句串分析函数进行分析/ if(syn=6) { 读下一个单词符号; if(syn=0 && (kk==0)) 输出(“success”); } else { if(kk!=1 ) 输出 ‘缺end’ 错误;kk=1;} else{输出’begin’错误;kk=1;} } return(schain); int yucu() { int schain=0; schain=statement();/调用语句分析函数进行分析/ while(syn=26) {读下一个单词符号; schain=statement(); /调用语句分析函数进行分析/ } return(schain); } int statement() { char tt[8],eplace[8]; int schain=0; {switch(syn) {case 10: strcpy(tt,token); scanner(); if(syn=18) {读下一个单词符号; strcpy(eplace,expression()); emit(tt,eplace,””,””); schain=0; } else {输出’缺少赋值号’的错误;kk=1; } return(schain); break; } } char *expression(void) {char *tp,*ep2,*eplace,*tt; tp=(char *)malloc(12);/分配空间/ ep2=(char *)malloc(12); eplace=(char *)malloc(12); tt =(char )malloc(12); strcpy(eplace,term ());/调用term分析产生表达式计算的第一项eplace/ while(syn=13 or 14) { 操作符 tt= ‘+’或者‘—’; 读下一个单词符号; strcpy(ep2,term());/调用term分析产生表达式计算的第二项ep2/ strcpy(tp,newtemp());/调用newtemp产生临时变量tp存储计算结果/ emit(tp,eplace,tt,ep2);/生成四元式送入四元式表/ strcpy(eplace,tp); } return(eplace); } char *term(void)/仿照函数expression编写/ char *factor
1
河北工业大学编译原理实验报告以及源程序,成绩为优秀,采用了三种方法实现词法语法语义程序,编写了附加实验内容,内容十分详细,仅供学习交流之用。
2019-12-21 21:45:01 7.61MB 编译原理 实验报告 源程序 C语言
1
实验分为 词法分析程序与 三地址代码生成程序 两部分。 实验一 1. 词法正规式描述、变换后的正规文法、状态图 2. 词法分析的数据结构与算法 思考题 1. 词法分析能否采用空格来区分单词? 2. 程序设计中哪些环节影响词法分析的效率?如何提高效率? 实验二 1. 语法制导定义 2. 改写后的产生式集合 3. 化简后的语法图 4. 递归子程序的算法 5. 三地址代码生成器的数据结构 6. 程序结构的说明 思考题 1.生成的三地址代码可否直接输出(不采用数据结构来实现属性code)? 2.如何保证四则运算的优先关系和左结合性?
2019-12-21 21:23:55 114KB 编译原理 实验报告
1
编译原理实验报告和代码,这里面包括了哈工大威海软件学院编译原理课程的所有实验文档和程序,自己独立完成,分享给大家借鉴,使用C#,VS2010开发,有图形界面
2019-12-21 21:18:49 420KB 编译原理实验
1
哈工大威海编译原理实验报告和源代码: 实验一 词法分析 实验二 语法分析 实验三 语义分析和中间代码生成 附有代码和实验报告~仅供参考~
2019-12-21 21:17:13 148KB 哈工大威海
1