编译原理---算符优先分析程序设计.docx

编译原理---算符优先分析程序设计.docx

ID:57441948

大小:29.75 KB

页数:39页

时间:2020-08-17

编译原理---算符优先分析程序设计.docx_第1页
编译原理---算符优先分析程序设计.docx_第2页
编译原理---算符优先分析程序设计.docx_第3页
编译原理---算符优先分析程序设计.docx_第4页
编译原理---算符优先分析程序设计.docx_第5页
资源描述:

《编译原理---算符优先分析程序设计.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、编译原理课程设计报告评分:签字:编译原理课程设计二——算符优先分析程序设计实验目的了解掌握算符优先分析的基本方法、内容;学会科学思考并解决问题,提高程序设计能力。实验内容与要求用算符优先分析方法设计一个分析解释程序,对输入的赋值语句、输出语句、清除语句进行词法分析、语法分析、表达式求值并存储于指定变量中;若存在错误,提示错误相关信息。文法表示:S→v=E

2、E?

3、clearE→E+T

4、E-T

5、TT→T*F

6、T/F

7、FF→(E)

8、v

9、c单词种别码设计:=1?2+3-4*5/6(7)8v9c10clear11#12N13实验环境系统环境为win

10、dows系统,编译环境为VS2015,编程语言为C++。实验过程过程一:构建firstVT()和lastVT()算法分析:对于firstVT()构建,对于每个非终结符F的产生式,第一个终结符或者‘

11、’后的第一个终结符应该在其firstVT()集合内,且若非终结符T能推出非终结符F则firstVT(T)包含first(F)。lastVT()的构造类似,对于每个非终结符F的产生式,非终结符后的第一个终结符都属于lastVT(F),且若非终结符T能推出非终结符F则lastVT(T)包含first(F)。算法实现主要函数:voidget_firs

12、tVT()//求firstVT();voidget_lastVT()//求lastVT();结果:FirstVT(S){=,?,l,+,-,*,/,(,v,c,}FirstVT(E){+,-,*,/,(,v,c,}FirstVT(T){*,/,(,v,c,}FirstVT(F){(,v,c,}LastVT(S){=,?,l,+,-,*,/,),v,c,}LastVT(E){+,-,*,/,),v,c,}LastVT(T){*,/,),v,c,}LastVT(F){),v,c,}过程二:构建优先符号表算法分析:(1)在产生式中两个相邻的终结

13、符优先顺序相等(2)对于小于关系,首先扫描终结符a标记flag=1,再扫描到非终结符Q,此时判断若flag=1,则对所有b∈FristVT{Q},aa.算法结果:=?+-*/()vcl#=-2-2-1-1-1-1-1-2-1-1-21?-2-2-2-2-2-2-2-2-2-2-21+-2111-1-1-11-1-1-21--2111-1-1-11-1-1-21*-211111-11-1-1-21/-

14、211111-11-1-1-21(-2-2-1-1-1-1-10-1-1-21)-211111-21-2-2-21v011111-21-2-2-21c-211111-21-2-2-21l-2-2-2-2-2-2-2-2-2-2-21#-1-1-1-1-1-1-1-1-1-1-10其中-2表示不会出现,1表示>,-1表示<,0表示=.字母l表示clear.过程三:词法分析算法分析:详见课程设计一算法主要函数:intletter()//判断是否为字母intdigit()//判断是否为数字intstr_to_num()//数字字符串转化为整数i

15、ntreserve(char**k)//处理保留字intsysmbol(identifier*id)//处理标识符,查找符号表并存放位置若没有则添加intconstant(constnumber*con)//存入常数表,并返回它在常数表中的位置voidWordAnalyze(constnumber*con,identifier*id,charsentence[],int&point,int&syn,int&sym_point)//词法分析voidInsert_to_symboltbl(intsyn,intvalue,int&point)/

16、/把二元组加入symbol表算法结果:得到语句的所有单词二元组symbolTBL表,存放种别码syn及其值val,其中对于种别码为9的变量val为标志符的入口标志,对于种别码为10的的常量val为存放的值。以及标志符表。过程四:算符优先分析算法分析:1)置栈底及输入串尾为#,并设##;栈顶终结符为θ,输入字为a;2)若θa,则在栈中寻找最左素短语,归约为N,并记录N的值重复2);若θ=a=#,且栈中为#N,则分析成功;否则,输入串为非法字串.数据结构设计:构造堆栈结构存储分

17、析句子typedefstruct{SymbolTbl*elem;intn;inttop;}Stack;堆栈相关操作intCreateStack(Stack&s,intn)//初始化voidcl

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。