欢迎来到天天文库
浏览记录
ID:34081071
大小:105.32 KB
页数:29页
时间:2019-03-03
《编译原理课程设计(词法分析,语法分析,语义分析,代码生成)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、#include#include#include#include#include#includeusingnamespacestd;/***客*****客***********下面是—"些重要数据结构的声明**客*客***客******************/structtoken//词法token结构体{intcode;//编码intnum;//递增编号token*next;};token*token
2、_head,*token_tail;//token队列structstr〃词法string结构体{intnum;//编号stringword;//字符串内容str*next;};str*string_head,*string_tail;//string队列structivan//i§法产生式结构体{charleft;//产生式的左部stringright;//产生式的右部intlen;〃产生式右部的长度};ivancss[20];〃语法20个产生式structpank//语法action表结构体{char
3、sr;〃移进或归约intstate;//转到的状态编号};pankaction[461[181;//action表intgo_to[46][ll];//i§法go_to表structike//语法分析栈结构体,双链{ike*pre;intnum;//状态intword;//符号编码ike*next;};ike*stack_head,*stack_tail;//分析栈首尾指针structL〃语义四元式的数据结构{intk;stringop;//操作符stringopl;〃操作数stringop2;〃操作数s
4、tringresult;//结果L*next;〃语义四元式向后指针L*Ltrue;//回填true链向前指针L*LfaIse;//回填false链向前指针};L*L_four_head,*L_four_tail,*L_true_head,*L_false_head;//四元式链,true链,false链structsymb//语义输入时符号表{stringword;//变量名称intaddr;//变量地址svmb*next:};symb*symb_head,*symb_tail;〃语义符号链表/*****
5、****************下面是与词法分析相关的一些函数的声明*窃*窃*窃*窃*窃*窃*窃*窃*容*容*容*容*容*/voidscan();//按字符读取源文件voidcifa_main();//词法分析主程序intjudge(charch);〃判断输入字符的类型voidoutl(charch);//写入token.txtvoidout3(charch,stringword);//写入string.txtvoidinputl(token*temp);//插入结点到队列tokenvoidinput3(
6、str*temp);〃插入结点到队列stringvoidoutput();〃输出三个队列的内容voidoutfile();//输出三个队列的内容到相应文件中voidyufa_main();〃语法分析主程序voidyufa」nitialize();〃初始化语法分析数据结构intyufa_SLRl(inta);〃语法分析主体部分intIDl(inta);〃给输入字符编号,转化成action表列编号stringID10(inti);〃给输入字符反编号intID2(charch);〃给非终结状态编号,转化成go_
7、to表列编号intID20(charch);〃给非终结状态编号charID21(intj);〃给非终结状态反编号voidadd(ike*temp);〃给ike分析栈链表增加一个结点voiddel();〃给ike分析栈链表删除一个结点/*********************下面是与语义分析相关的一.些函数的声明*窃*窃*窃*窃*窃*窃*窃*窃*容*容*容*容*容*/voidyuyi_main(intm);〃语义分析主程序voidadd_L_four(L*temp);//向四元式链中加一个结点voidad
8、d_L_true(L*temp);//向true链中加一*个结点voidadd_L_false(L*temp);//向false链中加一个结点voidadd_symb(symb*temp);//向语义符号表链中加一个结点voidoutput_yuyi();//输出中间代码四元式和最后符号表stringnewop(intm);〃把数字变成字符串stringid_numtoname(intnum);//iE编号转换成相应的变量名i
此文档下载收益归作者所有