好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

编译原理词法分析及语法分析.docx

12页
  • 卖家[上传人]:学***
  • 文档编号:231078580
  • 上传时间:2021-12-28
  • 文档格式:DOCX
  • 文档大小:18.87KB
  • / 12 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 编译原理词法分析及语法分析 编译原理 实验报告 实验名称:词法分析及语法分析专业班级: 姓名: 学号: 完成日期: 实验一、sample语言的词法分析 一、实验目的 给出SAMPLE文法规范,要求编写SAMPLE语言的词法分析程序 二、实验准备 了解sample语言单词的定义,选择任一种编程语言实现词法分析 三、实验内容 给出SAMPLE语言文法,输出单词(关键字、专用符号以及其它标记) 1、格式 输入:源程序文件输出:关键字、专用符号以及其它标记 2、实现原理 程序中先判断这个句语句中每个单元为关键字、常数、运算符、界符,对与不同的单词符号给出不同编码形式的编码,用以区分之 3、实验方法 读懂Sample源代码,自己重点独立实现对常量的判别 四、实验设计 1、设计SAMPLE语言的词法分析器 A、字符集定义 1. → 0│1│2│…│9 4. → │=│:= │/*│*/│.. 8. → │ │ 9. → ││ 10. → │ 11. → true│false 12. → 除 {} 外的任意字符串 2、词法分析系统流程设计 四、源程序清单 1、源代码 /** * 读取测试文件中的每一行然后传入Scaner中扫描 */ import java.io.File; import java.io.RandomAccessFile; public class Analyzer { private Scaner scaner; private File testFile; public static final String testFileAdd = "e:\\t7.txt"; //测试文件的绝对地址private RandomAccessFile fileReandomReader; public void initAnalayzer() { this.scaner = new Scaner(); try { testFile = new File(testFileAdd); this.fileReandomReader = new RandomAccessFile(testFile, "r"); } catch (Exception e) { System.out.println("测试文件不存在"); } } public void startAnalyze() { String tmpString = ""; String result; int row = 0; System.out.println("开始分析"); try { while ((tmpString = this.fileReandomReader.readLine()) != null) { ++row; System.out.println("analyze row " + row + ""); // System.err.println(tmpString + "!! " +row); result = scaner.scan(tmpString); System.out.println(result); scaner.cleanScaner(); tmpS tring = ""; } } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { Analyzer a = new Analyzer(); a.initAnalayzer(); a.startAnalyze(); } } /** * 分析从analyze传过来的每一行源码 */ import java.util.HashMap; import java.util.Map; public class Scaner { private char ch; private String token; private String result; private int index = 0; private char[] strChar = new char[1000]; private int rowLength = 0; // private KeywordConfig keywordConfig; // private PunctuationConfig punctuationConfig; //保留字键值对表 private Map(); keywords.put("and", 1); keywords.put("array", 2); keywords.put("begin", 3); keywords.put("bool", 4); keywords.put("call", 5); keywords.put("case", 6); keywords.put("char", 7); keywords.put("constant", 8); keywords.put("dim", 9); keywords.put("do", 10); keywords.put("else", 11); keywords.put("end", 12); keywords.put("write", 13); keywords.put("for", 14); keywords.put("if", 15); keywords.put("input", 16); keywords.put("integer", 17); keywords.put("not", 18); keywords.put("of", 19); keywords.put("or", 20); keywords.put("output", 21); keywords.put("procedure", 22); keywords.put("program", 23); keywords.put("read", 24); keywords.put("real", 25); keywords.put("repeat", 26); keywords.put("set", 27); keywords.put("stop", 28); keywords.put("then", 29); keywords.put("to", 30); keywords.put("while", 31); keywords.put("until", 32); keywords.put("var", 33); //单界符键值对表创建 this.punctuations = new HashMap(); doublePun.put("=", "双界符2"); doublePun.put("b) and (b>3) then c:=3; x:=2+(3*a)-b*c*8; if(2+3>a) and (b>3) and (a>c) then c:=3; for x:=1+2 to 3 do b:=100; while a>b do c:=5; for x:=1+d to 3 do b:=15; while t>b do c:=5; repeat a:=10; until a>b; end. 3、测试结果 开始分析 analyze row 1 [保留字] program [标识符] example analyze row 2 [保留字] var analyze row 3 [标识符] a [单界符:逗号] , [标识符] b [单界符:逗号] , [标识符] c [保留字] integer analyze row 4 [标识符] x [保留字] char analyze row 5 [保留字] begin analyze row 6 [保留字] if [单界符:左圆括号] ( [标识符] a [单界符:加号] + [标识符] c [单界符:星号] * [数字] 3 [标识符] b [单界符:右圆括号] ) [保留字] and [单界符:左圆括号] ( [标识符] b [数字] 3 [单界符:右圆括号] ) analyze row 7 [保留字] then [标识符] c [双界符6] := [数字] 3 analyze row 8 [标识符] x [双界符6] := [数字] 2 [单界符:加号] + [单界符:左圆括号] ( [数字] 3 [单界符:星号] * [标识符] a 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.