好文档 - 专业文书写作范文服务资料分享网站

西安邮电大学 编译原理词法分析

天下 分享 时间: 加入收藏 我要投稿 点赞

西 安 邮 电 大 学

(计算机学院)

课内实验报告

实验名称: 词法分析器

专业名称: 班 级: 学生姓名:

学号(8位): 指导教师:

实验日期: 年月日

一. 实验目的及实验环境

设计一个词法分析器,并更好的理解词法分析实现原理,掌握程序设计语言中各类单词的词法分析方法,并实现对一种程序设计语言的词法分析。

二. 实验内容

1.对java程序语言的词法分析:单词分类表: key value type key value type KEYWORD throw KEYWORD 1 abstract 42 assert KEYWORD throws KEYWORD 2 43 boolean KEYWORD transient KEYWORD 3 44 break KEYWORD try KEYWORD 4 45 case KEYWORD void KEYWORD 5 46 catch KEYWORD volatile KEYWORD 6 47 char KEYWORD while KEYWORD 7 48 class KEYWORD + OPERATOR 8 49 const KEYWORD OPERATOR 9 50 ++ continue KEYWORD OPERATOR 10 51 - default KEYWORD OPERATOR 11 52 -- do KEYWORD OPERATOR 12 53 * double KEYWORD OPERATOR 13 54 / else KEYWORD OPERATOR 14 55 = enum KEYWORD OPERATOR 15 56 == extends KEYWORD OPERATOR 16 57 % final KEYWORD OPERATOR 17 58 ! finally KEYWORD OPERATOR 18 59 != float KEYWORD OPERATOR 19 60 > for KEYWORD OPERATOR 20 61 >= goto KEYWORD OPERATOR 21 62 >> if KEYWORD OPERATOR 22 63 < implements KEYWORD OPERATOR 23 64 <= import KEYWORD OPERATOR 24 65 << instanceof KEYWORD OPERATOR 25 66 & int KEYWORD OPERATOR 26 67 && interface KEYWORD OPERATOR 27 68 ~ long KEYWORD OPERATOR 28 69 | native KEYWORD OPERATOR 29 70 || new KEYWORD OPERATOR 30 71 ^ package KEYWORD DEVIDER 31 72 ; protected KEYWORD DEVIDER 32 73 , public KEYWORD DEVIDER 33 74 . return KEYWORD DEVIDER 34 75 ( strictfp KEYWORD DEVIDER 35 76 ) short KEYWORD DEVIDER 36 77 {

static KEYWORD DEVIDER 37 78 } super KEYWORD DEVIDER 38 79 [ switch KEYWORD DEVIDER 39 80 ] synchronized KEYWORD DEVIDER 40 81 “ this KEYWORD DEVIDER 41 82 ‘ 2.单词结构描述(正规式或正规文法) <字母表>→<变量><数字>|<变量>|<关键字>|<字母>|<分隔符>

<关键字>→abstract|assert|boolean|break|byte|case|catch|char|class| const|continue|default|do|double|else|enum|extends|final|finally| float|for|goto|if|implements|import|instanceof|int|interface|long native|new|package|private|protected|public|return|strictfp|short static|super|switch|synchronized|this|throw|throws|transient|try void|volatile|while

<操作符>→+|++|-|--|*|/|=|==|%|!|!=|%|>|>=|>>|<|<=|<<

|&|&&|~||||||^

<数字>→<数字>.<数字>|0|1|2|3|4|5|6|7|8|9 <字母>→A|B|...|X|Y|Z|a|b|...|x|y|z <分隔符>→;|,|.|(|)|{|}|[|]|”|’ 3.单词状态转换图

空白 字母

字母 非字母非数字非关键字 S 1 0 2 非字母 关键字

3 4

非字母非数字 5 字母或数字 6 数字

非数字或. 数字

7 8

小数点

非数字 数字 9 A

分隔符 B

操作符

C

4.算法描述

读取文件到内存,逐个字母分析,并将连续的字母使用超前搜索组合成为变量或关键字;若是数字,则要判断是否为浮点数,即使用超前搜索的时候,判断扫描到的字符是否为小数点;若是分隔符或者操作符,则要到响应的表中查找并输出。

三.方案设计

程序结构:

1.终结符封装的javabean:用于存储id,代表的实体entity,种类type; 2.关键字表存放在一个Map集合KeyWordTable中;分隔符表存放在一个Map集合DeviderTable中;操作符表存放在OperatorTable中;

3.Scanner工具类用于扫描输入的java源程序;

4.Analysis类用于分析词法,analysis方法分析词法。 程序流程图 开始 读取源文件 扫描数字? 添加分隔符 N Y Y N 是分隔符? 扫描字母? 读取源文件 Y Y Y N 数字或.? 扫描字母? 添加操作符 N N 添加数字 关键字? 添加变量 Y 添加关键字

四.测试数据及运行结果

1.正常测试数据(3组)及运行结果:

扫描Analyst.java

WordType [id=78, entity=}, type=4, content=}] WordType [id=78, entity=}, type=4, content=}]

WordType [id=34, entity=return, type=1, content=return] WordType [id=0, entity=, type=5, content=list] WordType [id=72, entity=;, type=4, content=;] WordType [id=78, entity=}, type=4, content=}]... 扫描Test.java

WordType [id=31, entity=package, type=1, content=package] WordType [id=0, entity=, type=5, content=com] WordType [id=74, entity=., type=4, content=.] WordType [id=0, entity=, type=5, content=zc] WordType [id=74, entity=., type=4, content=.] WordType [id=0, entity=, type=5, content=ca] WordType [id=74, entity=., type=4, content=.] WordType [id=0, entity=, type=5, content=test] WordType [id=72, entity=;, type=4, content=;]

WordType [id=33, entity=public, type=1, content=public] WordType [id=8, entity=class, type=1, content=class] WordType [id=0, entity=, type=5, content=Test] WordType [id=77, entity={, type=4, content={]

WordType [id=0, entity=, type=5, content=private]

WordType [id=37, entity=static, type=1, content=static] WordType [id=26, entity=int, type=1, content=int] WordType [id=0, entity=, type=5, content=a] WordType [id=55, entity==, type=3, content==] WordType [id=0, entity=, type=2, content=0] WordType [id=72, entity=;, type=4, content=;]

WordType [id=0, entity=, type=5, content=private] WordType [id=17, entity=final, type=1, content=final] WordType [id=13, entity=double, type=1, content=double] WordType [id=0, entity=, type=5, content=b] WordType [id=55, entity==, type=3, content==] WordType [id=0, entity=, type=2, content=1.234] WordType [id=72, entity=;, type=4, content=;]

WordType [id=33, entity=public, type=1, content=public] WordType [id=37, entity=static, type=1, content=static] WordType [id=46, entity=void, type=1, content=void] WordType [id=0, entity=, type=5, content=main]

五.总结

实验过程中遇到的问题及解决办法:

扫描过程中出现非法字符的处理:\\t,\\n等:跳过

西安邮电大学 编译原理词法分析

西安邮电大学(计算机学院)课内实验报告实验名称:词法分析器专业名称:班级:学生姓名:学号(8位):指导教师:实
推荐度:
点击下载文档文档为doc格式
37k3b5nq7p9jajq89mbu
领取福利

微信扫码领取福利

微信扫码分享