ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:98.26KB ,
资源ID:6694759      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6694759.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(语法分析器的设计大学论文.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

语法分析器的设计大学论文.docx

1、语法分析器的设计大学论文 编译原理 语法分析器的设计 根据某一文法编制调试 LL ( 1 )分析程序,以便对任意输入的符号串进行分析。 构造预测分析表,并利用分析表和一个栈来实现对上述程序设计语言的分析程序。 分析法的功能是利用LL(1)控制程序根据显示栈栈顶内容、向前看符号以及LL(1)分析表,对输入符号串自上而下的分析过程。 实验设计方案 1、设计思想(1)、LL(1)文法的定义LL(1)分析法属于确定的自顶向下分析方法。LL(1)的含义是:第一个L表明自顶向下分析是从左向右扫描输入串,第2个L表明分析过程中将使用最左推导,1表明只需向右看一个符号便可决定如何推导,即选择哪个产生式(规则)

2、进行推导。LL(1)文法的判别需要依次计算FIRST集、FOLLOW集和SELLECT集,然后判断是否为LL(1)文法,最后再进行句子分析。需要预测分析器对所给句型进行识别。即在LL(1)分析法中,每当在符号栈的栈顶出现非终极符时,要预测用哪个产生式的右部去替换该非终极符;当出现终结符时,判断其与剩余输入串的第一个字符是否匹配,如果匹配,则继续分析,否则报错。LL(1)分析方法要求文法满足如下条件:对于任一非终极符A的两个不同产生式A,A,都要满足下面条件:SELECT(A)SELECT(A)=(2)、预测分析表构造LL(1)分析表的作用是对当前非终极符和输入符号确定应该选择用哪个产生式进行推

3、导。它的行对应文法的非终极符,列对应终极符,表中的值有两种:一是产生式的右部的字符串,一是null。若用M表示LL(1)分析表,则M可表示如下: M: VNVTPError M(A, t) = A,当tselect(A) ,否则 M(A, t) = Error其中P表示所有产生式的集合。(3)、语法分析程序构造LL(1)分析中X为符号栈栈顶元素,a为输入流当前字符,E为给定测试数据的开始符号,#为句子括号即输入串的括号。分析表用一个二位数组M表示,数组元素MA,a中的下标A表示非终结符,a为终结符或句子括号#,二维数组中存放的是一条关于A 的产生式,表明当非终结符A向下推导时,面临输入符a时,

4、所采用的候选产生式,当元素内容无产生式时,则表明用A 的左部向下推导时出现了不该出现的符号,因此元素内容转向出错处理的信息。LL(1)分析过程主要包括以下四个动作:替换:当XVN时选相应产生式的右部去替换X。此时X出栈,逆序入栈。匹配:当XVT时它与a进行匹配,其结果可能成功,也可能失败,如果成功则符号栈中将X退栈并将输入流指针向前移动一位,否则报错。接受:当格局为(#,空#)时报告分析成功。报错:出错后,停止分析。并给出相应的错误提示信息。2.程序流程图:3、实验程序(1)分析栈类:public class stack private char s; private int top; pub

5、lic stack() s = new char200; s0 = #; top = 0; char getTop() return stop; void push(String str) for (int i = str.length() - 1; i = 0; i-) s+top = str.charAt(i); void clear() top = 0; char pop() if (top != 0) top-; return stop; public String toString() String tmp = ; for (int i = 0; i + ); else stack.

6、pop(); stack.push(tmp); pri( + ctmp + - + tmp); public String work(String ts) input = ts; input = input.trim()+ #; symbol = true; stack.clear(); tempBuffer.append(rn步骤 分析栈 剩余输入栈 所用产生式rn); analyse(); if (symbol) tempBuffer.append(r是正确的符号串r); return tempBuffer.toString(); else tempBuffer.append(r不是正确的

7、符号串r); return tempBuffer.toString(); /gets and sets/public StringBuffer getTempBuffer() return tempBuffer;public void setTempBuffer(StringBuffer tempBuffer) this.tempBuffer = tempBuffer;public stack getStack() return stack;public void setStack(stack stack) this.stack = stack;public String getTab() r

8、eturn tab;public void setTab(String tab) this.tab = tab;public String getInput() return input;public void setInput(String ns) this.input = ns;public int getPtr() return ptr;public void setPtr(int ptr) this.ptr = ptr;public int getRow() return row;public void setRow(int row) this.row = row;public int

9、 getCol() return col;public void setCol(int col) this.col = col;public int getStep() return step;public void setStep(int step) this.step = step;public boolean isBoo() return symbol;public void setBoo(boolean boo) this.symbol = boo; (3)WINDOW窗体类:import java.awt.BorderLayout;import java.awt.GridLayout

10、;import java.awt.Panel;import javax.swing.JFrame;import javax.swing.JScrollPane;public class gui extends javax.swing.JFrame /* Creates new form gui */ private javax.swing.JButton jButton1; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JTextArea jTextArea

11、1; private javax.swing.JTextField jTextField1; private Panel p1=new Panel(); private Panel p2=new Panel(); public gui() initComponents(); private void initComponents() jLabel1 = new javax.swing.JLabel(); jTextField1 = new javax.swing.JTextField(); jLabel2 = new javax.swing.JLabel(); jTextArea1 = new

12、 javax.swing.JTextArea(20,30); jButton1 = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jLabel1.setText(本程序只能对由+,-,*,/,(,),i构成的以#结尾的字符串进行分析。请输入要翻译的表达式:); jLabel2.setText(分析结果:); jButton1.setText(分析); jButton1.addActionListener(new java.awt.event.Acti

13、onListener() public void actionPerformed(java.awt.event.ActionEvent evt) jButton1ActionPerformed(evt); ); final GridLayout gridLayout = new GridLayout(0, 1);/创建表格布局管理器 gridLayout.setVgap(0); /设置组件之间垂直距离 gridLayout.setHgap(0); /设置组件之间平行距离 p1.setLayout(gridLayout); p1.add(jLabel1); p1.add(jTextField1)

14、; p2.add(jLabel2); p2.add(new JScrollPane(jTextArea1); getContentPane().add(p1, BorderLayout.NORTH); getContentPane().add(p2, BorderLayout.CENTER); getContentPane().add(jButton1, BorderLayout.SOUTH); setSize(600,500); setLocation(400, 100); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_C

15、LOSE); private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) anlysis ans = new anlysis(); jTextArea1.setText(ans.work(jTextField1.getText(); public static void main(String args) java.awt.EventQueue.invokeLater(new Runnable() public void run() new gui().setVisible(true); ); 五、实验结果 6、实验

16、结果分析: 本次设计借助语法分析,设计一个表达式的判断分析器,从键盘上输入算术表达式,分析器对该表达式的正确与否进行分析。若是正确的算术表达式,则符合文法,输出正确;若是错误的算术表达式,则表达式不符合文法,输出其错误之处并显示异常。该程序执行过程无误,输出结果正常。但由于我们的疏忽,该程序未能完全满足实验要求,并不能够构造其LR分析表,并不是由该分析表驱动的语法分析器程序,这是本次实验的一个缺陷。七、实验总结: 此次实验,让我对编译原理的基本知识有了深入的了解,加强了对语法分析的认识。代码的编写过程中用到了一些以前从未用过的函数,都是现学现用,掌握还不是很深。在代码调试过程中结果出现许多无法解释的错误,但仍旧坚持下来了,最终调试出了结果。通过这次实验,我们的动手实践能力得到很大的提高。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1