实验二--语法分析程序的设计-(7页).doc

上传人:1595****071 文档编号:36137237 上传时间:2022-08-25 格式:DOC 页数:7 大小:150.50KB
返回 下载 相关 举报
实验二--语法分析程序的设计-(7页).doc_第1页
第1页 / 共7页
实验二--语法分析程序的设计-(7页).doc_第2页
第2页 / 共7页
点击查看更多>>
资源描述

《实验二--语法分析程序的设计-(7页).doc》由会员分享,可在线阅读,更多相关《实验二--语法分析程序的设计-(7页).doc(7页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、-实验二-语法分析程序的设计-第 7 页实验二 语法分析程序的设计姓名: 学号: 专业班级一、实验目的通过设计、编制、调试一个典型的语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,进一步掌握常用的语法分析中预测分析方法。二、实验内容设计一个文法的预测分析程序,判断特定表达式的正确性。三、实验要求1、 给出文法如下:GE E-T|E+T; T-F|T*F; F-i|(E);2、 根据该文法构造相应的LL(1)文法及LL(1)分析表,并为该文法设计预测分析程序,利用C语言或C+语言或Java语言实现;3、 利用预测分析程序完成下列功能:1) 手工将测试的表达式写入文本文件,

2、每个表达式写一行,用“;”表示结束;2) 读入文本文件中的表达式;3) 调用实验一中的词法分析程序搜索单词;4) 把单词送入预测分析程序,判断表达式是否正确(是否是给出文法的语言),若错误,应给出错误信息;5) 完成上述功能,有余力的同学可以进一步完成通过程序实现对非LL(1)文法到LL(1)文法的自动转换(见实验二附加资料1)。四、实验环境PC微机DOS操作系统或 Windows 操作系统Turbo C 程序集成环境或 Visual C+ 程序集成环境五、实验步骤1、 分析文法,将给出的文法转化为LL(1)文法;2、 学习预测分析程序的结构,设计合理的预测分析程序;3、 编写测试程序,包括表

3、达式的读入和结果的输出;4、 测试程序运行效果,测试数据可以参考下列给出的数据。六、测试数据 输入数据:编辑一个文本文文件expression.txt,在文件中输入如下内容:10;1+2;(1+2)*3+(5+6*7);(1+2)*3+4;1+2+3+(*4+5);(a+b)*(c+d);(ab3+de4)*5)+1;正确结果:(1)10;输出:正确(2)1+2;输出:正确(3)(1+2)*3+(5+6*7);输出:正确(4)(1+2)*3+4输出:错误(5)1+2+3+(*4+5)输出:错误(6)(a+b)*(c+d)输出:正确(7)(ab3+de4)*5)+1输出:错误七、源代码impor

4、t java.util.*;import java.io.*;public class test2 static String key_word = main, if, then, while, do, int,else ;static String cal_word = +, -, *, /, , , , (, * 给定文法GE: E-T|E+T; T-F|T*F; F-i|(E);static String gram = E-TA, A-+TA, A-, T-FB, B-*FB,B-, F-P, F-(E) ;static String followE = ), # ;static Str

5、ing followEA = ), # ;static String followT = +, ), # ;static String followTB = +, ), # ;static String followF = *, +, ), # ;static String firstE = i, ( ;static String firstEA = +, ;static String firstT = i, ( ;static String firstTB = *, ;static String firstF = i, ( ;static String list = , i, +, *, (

6、, ), # , E, TA, null, null, TA, null, null , A, null, +TA, null, null, , , T, FB, null, null, FB, null, null , B, null, , *FB, null, , , F, i, null, null, (E), null, null ;public static void scan(String infile,String outfile, Stack word, Stack expression)throws Exception java.io.File file = new java

7、.io.File(infile);Scanner input = new Scanner(file);java.io.PrintWriter output = new PrintWriter(outfile);int count = 0;wordcount.push(#);while (input.hasNext() String tmp = input.next();int i = 0;while (i tmp.length() if (tmp.charAt(i) = 1) /检查十进制数字String num = ;while (tmp.charAt(i) = 0) num += tmp.

8、charAt(i);i+;if (i = tmp.length()break;output.println();wordcount.push(i);expressioncount.push(num);if (i + 2 tmp.length()/ 检查十六进制数字if (tmp.charAt(i) = 0 & tmp.charAt(i + 1) = x) i += 2;String num = ;while (tmp.charAt(i) = 0) | (tmp.charAt(i) = a) num += tmp.charAt(i);i+;if (i = tmp.length()break;ou

9、tput.println();wordcount.push(i);expressioncount.push(num);if (i + 1 tmp.length()/ 检查八进制数字if (tmp.charAt(i) = 0) i+;String num = ;while (tmp.charAt(i) = 0) num += tmp.charAt(i);i+;if (i = tmp.length()break;output.println();wordcount.push(i);expressioncount.push(num);/ 检查关键字和变量if (i tmp.length() if (

10、i = a& tmp.charAt(i) = a & tmp.charAt(i) = z) tmp_word += tmp.charAt(i);i+;if (i = tmp.length()break;boolean is_keyword = false;for (int j = 0; j key_word.length; j+) if (tmp_word.equals(key_wordj) output.println();wordcount.push(key_wordj);expressioncount.push(key_wordj);is_keyword = true;break;if

11、(!is_keyword) output.println();wordcount.push(i);expressioncount.push(tmp_word);/ 检查运算符以及;if (i tmp.length() if (i + 1 tmp.length() if (tmp.charAt(i + 1) = =) for (int j = 0; j cal_word.length; j+) if (cal_wordj.equals( + tmp.charAt(i)+ tmp.charAt(i + 1) output.println( + cal_wordj + ,wordcount.push

12、(cal_wordj);expressioncount.push(-);if (wordcount.peek() = ;) wordcount.pop();wordcount.push(#);count+;wordcount.push(#);i += 2;break;for (int j = 0; j cal_word.length; j+) if (cal_wordj.equals( + tmp.charAt(i) output.println();wordcount.push(cal_wordj);expressioncount.push(cal_wordj);if (wordcount.

13、peek() = ;) wordcount.pop();wordcount.push(#);count+;wordcount.push(#);i+;break;input.close();output.close();public static void main(String args) throws Exception String infile = D:/expression.txt;String outfile = D:/result2.txt;Stack tmpword = new Stack20;Stack expression = new Stack20;for (int i =

14、 0; i tmpword.length; i+) tmpwordi = new Stack();expressioni = new Stack();test1.scan(infile, outfile, tmpword, expression); int i = 0;while (tmpwordi.size() 2)String tmp = expressioni.toArray(new String0);printArray(tmp);isLL1(tmpwordi);i+;public static void printArray(String s)for (int i = 0; i s.

15、length; i+)System.out.print(si);System.out.println();public static void isLL1(Stack tmpword)String input = tmpword.toArray(new String0);int inputCount = 0;Stack status = new Stack();status.push(inputinputCount+);status.push(E);boolean flag = true;boolean result = true;while (flag) if (isVt(status.pe

16、ek()if (status.peek().equals(inputinputCount)status.pop();inputCount+;elseflag = false;result = false;else if (status.peek().equals(#)if (status.peek().equals(inputinputCount)flag = false;elseflag = false;result = false;else if (listindexInList(status.peek(), inputinputCount)0indexInList(status.peek

17、(), inputinputCount)1 != null)int a = indexInList(status.peek(), inputinputCount);if (lista0a1.endsWith()status.pop();elsestatus.pop();for (int i = lista0a1.length() - 1; i = 0; i-)status.push( + lista0a1.charAt(i);elseflag = false;result = false;if (result)System.out.println(正确);elseSystem.out.prin

18、tln(错误);public static boolean isVt(String s) /判断是否为Vtfor (int i = 1; i list0.length - 1; i+) if (s.equals(list0i) return true;return false;public static int indexInList(String m, String a) int i = 0, j = 0;for (int c = 1; c list.length; c+) if (m.equals(listc0)i = c;for (int c = 1; c TAA-+TA|T-FBB-*FB|F-(E) | i实验结果:

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 单元课程

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com