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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

实验二 LL1分析法.docx

1、实验二 LL1分析法实验二 LL(1)分析法一、实验目的 通过完成预测分析法的语法分析程序,了解预测分析法和递归子程序法的区别和联系。使学生了解语法分析的功能,掌握语法分析程序设计的原理和构造方法,训练学生掌握开发应用程序的基本方法。有利于提高学生的专业素质,为培养适应社会多方面需要的能力。二、实验内容 根据某一文法编制调试 LL ( 1 )分析程序,以便对任意输入的符号串进行分析。 构造预测分析表,并利用分析表和一个栈来实现对上述程序设计语言的分析程序。 分析法的功能是利用LL(1)控制程序根据显示栈栈顶内容、向前看符号以及LL(1)分析表,对输入符号串自上而下的分析过程。 三、 LL(1)

2、分析法实验设计思想及算法 模块结构:(1)定义部分:定义常量、变量、数据结构。(2)初始化:设立LL(1)分析表、初始化变量空间(包括堆栈、结构体、数组、临时变量等);(3)控制部分:从键盘输入一个表达式符号串;(4)利用LL(1)分析算法进行表达式处理:根据LL(1)分析表对表达式符号串进行堆栈(或其他)操作,输出分析结果,如果遇到错误则显示错误信息。四、实验要求1、编程时注意编程风格:空行的使用、注释的使用、缩进的使用等。2、如果遇到错误的表达式,应输出错误提示信息。 3、对下列文法,用LL(1)分析法对任意输入的符号串进行分析: (1)E-TG(2)G-+TG|TG(3)G-(4)T-F

3、S(5)S-*FS|/FS(6)S-(7)F-(E)(8)F-i输出的格式如下:五、实验步骤1、根据流程图编写出各个模块的源程序代码上机调试。2、 编制好源程序后,设计若干用例对系统进行全面的上机测试,并通过所设计的LL(1)分析程序;直至能够得到完全满意的结果。3、书写实验报告 ;实验报告正文的内容: 写出LL(1)分析法的思想及写出符合LL(1)分析法的文法。 程序结构描述:函数调用格式、参数含义、返回值描述、函数功能;函数之间的调用关系图。 详细的算法描述(程序执行流程图)。 给出软件的测试方法和测试结果。 实验总结 (设计的特点、不足、收获与体会)。六、源程序1、操作类package

4、LL1Analysis;public class LL1_Opertion private char strChar;/输入串 private char stack = new char1000;/分析栈 private int top = 0;/分析栈指针 private int strPointer = 0;/输入串指针 private int length;/输入串长度 private String analysisTable = new String69;/分析表 private final char constChar= i,(,+,-,*,/,),#;/常字符 private St

5、ring dataStrings = new String10005;/结果数据表 private String tempString = new String();/临时字符串 private String result = new String();/得出的结果字符串 private int dataRow = 0;/数据表行数 /* 规则 i ( + - * / ) #E E-TG E-TG synch synchG G-+TG G-TG G- G-T T-FS T-FS synch synch synch synchS S- S- S-*FS S-/FS S- S-F F-i F-(E

6、) synch synch synch synch synch synch */ public LL1_Opertion() /初始化各个参数 for (int i = 0; i 6; i+) for (int j = 0; j 9; j+) analysisTableij = new String(); analysisTableij = ; for (int i = 0; i 1000; i+) for (int j = 0; j 5; j+) dataStringsij = new String(); dataStringsij = ; analysisTable01 = i; anal

7、ysisTable02 = (; analysisTable03 = +; analysisTable04 = -; analysisTable05 = *; analysisTable06 = /; analysisTable07 = ); analysisTable08 = #; analysisTable10 = E; analysisTable20 = G; analysisTable30 = T; analysisTable40 = S; analysisTable50 = F; analysisTable11 = TG; analysisTable12 = TG; analysis

8、Table23 = +TG; analysisTable24 = -TG; analysisTable27 = ; analysisTable28 = ; analysisTable31 = FS; analysisTable32 = FS; analysisTable43 = ; analysisTable44 = ; analysisTable45 = *FS; analysisTable46 = /FS; analysisTable47 = ; analysisTable48 = ; analysisTable51 = i; analysisTable52 = (E); stacktop

9、 = #; stack+top = E; public boolean checkChar(char needCheck) /检查字符是否在字符表中 for (int i = 0; i constChar.length; i+) if (needCheck = constChari) return true; return false; public void printStack() /输出分析栈 this.tempString = new String(); for (int i = 0; i top+1; i+) this.tempString += stacki; System.out

10、.print(stacki); result += stacki; System.out.print(tt); result += tt; public void printStr() /输出剩余输入串 this.tempString = new String(); for (int i = 0; i strPointer; i+) System.out.print( ); result += ; for (int i = strPointer; i length; i+) this.tempString += strChari; System.out.print(strChari); res

11、ult += strChari; System.out.print(ttt); result += ttt; public void analysis(String line) /LL(1)分析 strChar = line.toCharArray(); length = strChar.length; String analysisString = new String(); char ch = strCharstrPointer; char topX; int finish = 0 , flag = 0; int row = 0 , column = 0; System.out.print

12、(步骤tt分析栈 tt剩余字符 tt所用产生式 tt动作n); result += 步骤tt分析栈 tt剩余字符 tt所用产生式 tt动作rn; dataStrings00 = dataRow+ + ; System.out.print(dataRow+tt); result += dataRow+tt; printStack(); dataStrings01 = tempString; printStr(); dataStrings02 = tempString; dataStrings04 = 初始化; result += tt初始化rn; System.out.print(n); do

13、topX = stacktop-; dataStringsdataRow0 = dataRow + ; System.out.print(dataRow+tt); result += dataRow+tt; for (int i = 0; i 9; i+) /判断是否为非终结符 if (checkChar(topX) flag = 1; break; if (flag = 1) /如果是终结符 if (topX = #) finish = 1; System.out.println(over); result += overrn; break; if (topX = ch) printStac

14、k(); dataStringsdataRow1 = tempString; ch = strChar+strPointer; printStr(); dataStringsdataRow2 = tempString; System.out.print(匹配n); dataStringsdataRow4 = GETNEXT(I); result += ttGETNEXT(I)rn; flag = 0; this.dataRow+; else printStack(); dataStringsdataRow1 = tempString; printStr(); dataStringsdataRo

15、w2 = tempString; System.out.print(错误n); result += tt错误rn; this.dataRow+; break; else for (int i = 0; i 6; i+) if (topX = analysisTablei0.charAt(0) row = i; break; for (int i = 0; i = 0; i-) stack+top = analysisString.charAt(i); printStack(); dataStringsdataRow1 = tempString; printStr(); dataStringsd

16、ataRow2 = tempString; System.out.print(analysisTablerow0+-+analysisString+n); dataStringsdataRow3 = analysisTablerow0+-+analysisString; result += analysisTablerow0+-+analysisString; if (!analysisString.equals() dataStringsdataRow4 = POP,PUSH(+analysisString+); result += ttPOP,PUSH(+analysisString+)r

17、n; else dataStringsdataRow4 = POP; result += ttPOPrn; if (stacktop = ) top-; this.dataRow+; else printStack(); dataStringsdataRow1 = tempString; printStr(); dataStringsdataRow2 = tempString; System.out.print(出错n); result += tt错误rn; this.dataRow+; break; while (finish = 0); public String getDataStrin

18、gs() return dataStrings; public void setDataStrings(String dataStrings) this.dataStrings = dataStrings; public int getDataRow() return dataRow; public void setDataRow(int dataRow) this.dataRow = dataRow; public String getResult() return result; public void setResult(String result) this.result = resu

19、lt; 2、界面类package LL1Analysis;import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.io.FileWriter;import org.eclipse.swt.widgets.Display;import org.eclipse.swt.widgets.FileDialog;import org.eclipse.swt.widgets.MessageBox;import org.eclipse.swt.widgets.Shell;import or

20、g.eclipse.swt.widgets.Menu;import org.eclipse.swt.widgets.TableItem;import org.eclipse.swt.SWT;import org.eclipse.swt.widgets.MenuItem;import org.eclipse.swt.custom.ScrolledComposite;import org.eclipse.swt.widgets.Text;import org.eclipse.swt.widgets.Table;import org.eclipse.swt.widgets.TableColumn;i

21、mport org.eclipse.swt.events.SelectionAdapter;import org.eclipse.swt.events.SelectionEvent;public class LL1SWT protected Shell shell; private Text text; private Text text_1; private Table table; private MessageBox messageBox; private File sourceFile = null; private LL1_Opertion mOpertion; private St

22、ring Language = new String(); private String analysisString = new String(); private String result = new String(); /* * Launch the application. * param args */ public static void main(String args) try LL1SWT window = new LL1SWT(); window.open(); catch (Exception e) e.printStackTrace(); /* * Open the

23、window. */ public void open() Display display = Display.getDefault(); createContents(); shell.open(); shell.layout(); while (!shell.isDisposed() if (!display.readAndDispatch() display.sleep(); /* * Create contents of the window. */ protected void createContents() shell = new Shell(); shell.setSize(5

24、70, 424); shell.setText(LL(1)u5206u6790u5668); Menu menu = new Menu(shell, SWT.BAR); shell.setMenuBar(menu); MenuItem menuItem = new MenuItem(menu, SWT.NONE); menuItem.addSelectionListener(new SelectionAdapter() Override public void widgetSelected(SelectionEvent e) try newTextTable(); catch (Excepti

25、on e2) e2.printStackTrace(); ); menuItem.setText(u65B0u5EFA); MenuItem menuItem_1 = new MenuItem(menu, SWT.NONE); menuItem_1.addSelectionListener(new SelectionAdapter() Override public void widgetSelected(SelectionEvent e) openFile(); ); menuItem_1.setText(u6253u5F00); MenuItem menuItem_3 = new MenuItem(menu, SWT.NONE); menuItem_3.addSelectionListener(new SelectionAdapter() Override public void widgetSelected(SelectionEvent e) try

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

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