实验1 词法分析

实验1 词法分析

ID:37698741

大小:371.00 KB

页数:14页

时间:2019-05-29

实验1 词法分析_第1页
实验1 词法分析_第2页
实验1 词法分析_第3页
实验1 词法分析_第4页
实验1 词法分析_第5页
资源描述:

《实验1 词法分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验1词法分析一、目的与要求1)目的通过设计调试词法分析程序,实现从源程序中分出各种单词的方法;加深对课堂教学的理解;提高词法分析方法的实践能力。2)要求u掌握从源程序文件中读取有效字符的方法和产生源程序的内部表示文件的方法。u掌握词法分析的实现方法。u上机调试编出的词法分析程序。二、说明本实验以赋值语句(以#号表示输入结束)为输入文件,BNF表示如下:〈赋值语句〉∷=变量=算术表达式〈算术表达式〉∷=〈项〉〈算术表达式〉∷=〈算术表达式〉+〈项〉〈算术表达式〉∷=〈算术表达式〉-〈项〉〈项〉∷=〈因式〉〈项〉∷=〈项〉*〈因式〉〈项〉∷=〈项〉/〈因式〉〈因式〉∷=〈

2、变量〉〈因式〉∷=(〈算术表达式〉)〈变量〉::=标识符

3、常整数字母表:Σ={+,,*,,(,),=,a,b,c….z,A,B,C…Z,0,1,2,…9,#} 单词类型:u标识符:字母组成,长度不限u常整数:数字组成u运算符:+,-,*,,()u结束符:#数据结构:标识符用单独的符号表来记录,符号表中标识符的属性只有一项:标识符本身的字符串值。输出:二元式,第一部分为单词的类别,第二部分为单词的属性值,其中标识符的属性值为标识符表的索引值,常整数的属性值为常整数值,其他的属性值为单词本身的字符串值三、词法分析过程1、背景知识词法分析是作为相对独立的阶段来完成的(对源

4、程序或中间结果从头到尾扫描一次,并作相应的加工处理,生成新的中间结果或目标程序)。在词法分析过程中,编译程序是通过操作系统从外部介质中读取源程序文件中的各个字符的。同时,为正确地识别单词,有时还需进行超前搜索和回退字符等操作。因此,为了提高读盘效率和便于扫描器进行工作,通常可采用缓冲输入的方案,即在内存中设置一个适当大小的输入缓冲区,让操作系统直接将磁盘上的源程序字符串分批送入此缓冲区中,供扫描器进行处理。词法分析程序的一般设计方案是:1)程序设计语言词法规则⇒正规文法⇒FA;或:词法规则⇒正规表达式⇒FA;2)NFA确定化⇒DFA;3)DFA最简化;4)确定单词符号输

5、出形式;5) 化简后的DFA+单词符号输出形式⇒构造词法分析程序。2、实验步骤1)写出三类单词的正规表达式u标识符:aa* 其中,a表示字母[a-z,A-Z]u常整数:d’d* 其中d’表示数字[19],d表示[09] u每个运算符的正规式就是运算符本身2)写出各个正规式对应的NFA标识符:eeea0 1 2 3 4 a e常整数:eeed’ 0 1 2 3 4 de运算符:+01 01 * 01 ………3)把所有的NFA改写成一个NFA,并进行确定化和化简a1 2 ad’d 3 4 + 5 d 6 * 7 / 8 (9 )10 = 11 4)从化简后的DFA到程序的编

6、写如果对DFA的每一个状态都先指明它要完成的任务,再把从状态出发的弧所标记的输入字母看作控制条件,DFA就是一个程序的流程图。读一个单词时,只有读到单词的后继符号时才知道单词的结束。所以,DFA需要做适当的修改。a0 1 a,d 标识符的DFAa0 1 2 非 a,d a,d 修改后标识符的DFA25)修改后的DFANumberINNUM 2 Others NumberWhite spaceLetterINID 3 LetterOthers Done + Start1 4* %()=6)算法参考(java语言):/* * To change this template,

7、 choose Tools 

8、 Templates * and open the template in theeditor. */ /** * * @author Administrator */ import java.util.*;class Word { final static intID=0; final static int CONS=1; final static int ADD=2; final static int SUB=3; final static int MUL=4; final static int DIV=5; final static 

9、int LBracket=6; final static int RBracket=7; final static int END=8; final static int EQUAL=9; public int tokenType=1; public String tokenValue=null;public int numValue=1; public Word(int ty, String tv, int nv){ tokenType=ty; tokenValue=tv; numValue=nv; } public Word(){ }

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。