编译原理_词法分析器

上传人:wm****3 文档编号:41427295 上传时间:2018-05-29 格式:DOC 页数:6 大小:82.50KB
返回 下载 相关 举报
编译原理_词法分析器_第1页
第1页 / 共6页
编译原理_词法分析器_第2页
第2页 / 共6页
编译原理_词法分析器_第3页
第3页 / 共6页
编译原理_词法分析器_第4页
第4页 / 共6页
编译原理_词法分析器_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《编译原理_词法分析器》由会员分享,可在线阅读,更多相关《编译原理_词法分析器(6页珍藏版)》请在金锄头文库上搜索。

1、一、实验目的和要求:一、实验目的和要求:设计并实现一个 JAVA 语言的词法分析程序,加深对词法分析原理的理解。二、实验原理:二、实验原理:词法分析是从左向右扫描每行源程序的符号,拼成单词,换成统一的机内表示形式TOKEN 字,送给语法分析程序。2TOKEN 字是一个二元式:(单词种别码,自身值)三、三、 实验步骤与要求实验步骤与要求1、设计的词法分析器符合软件工程的要求。2、 编制程序,此程序应具有如下功能: 1)输入:字符串(待进行词法分析的源程序),输出:由(种别码,自身值)所组成的二元组序列。2)功能:a. 滤空格b. 识别保留字c.识别标识符四、试验设计和算法分析:四、试验设计和算法

2、分析:实验原理:实验原理:程序流程:程序流程:置初值调用扫描子程序输出串结束输出单词二元组是否结束词法分析主程序示意图词法分析主程序示意图待分析的简单语言的词法待分析的简单语言的词法(1) 关键字:“abstract“,“assert“,“boolean“,“break“,“byte“, “case“,“catch“,“ char “,“class“,“continue“,“default“,“do“,“ double“,“else“,“enum“,“extends“,“final“,“finally“,“float“,“for“,“if“,“implements“,“import“,“ins

3、tanceof“,“int“,“interface“,“long“,“native“,“new“,“package“,“private“,“protected“,“public“,“return“,“strictfp“,“short“,“static“,“super“,“switch“,“synchronized“,“this“,“throw“,“throws“,“transient“,“try“,“void“,“volatile“,“while“所有关键字都是小写。(2)运算符和界符:“=“,“+“,“-“,“*“,“/“,“,“=“,“=“,“!=“,“!“(“,“)“,“,“,“,“,“

4、;“,“/*“,“*/“,“/“ 设计的词法分析器符合软件工程的要求。2、 编制程序,此程序应具有如下功能: 3)输入:字符串(待进行词法分析的源程序),输出:由(种别码,自身值)所组成的二元组序列。4)功能:d. 滤空格e. 识别保留字f. 识别标识符词法分析程序的算法思想词法分析程序的算法思想算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。三、代码:三、代码:package com.huke.lpascal;import java.util.Scanner;/* 词法分析器:输入源程序,输出单词符号。

5、* 输入:字符串(待进行词法分析的源程序),输出:由(种别码,自身值)所组成的二元组序列。* author wnp*/public class Lexical /* param args*/public Lexical() /构造函数 /定义一个保存关键字的字符串数组String keyWords=new String“abstract“,“assert“,“boolean“,“break“,“byte“, “case“,“catch“,“ char “,“class“,“continue“,“default“,“do“,“ double“,“else“,“enum“,“extends“,“f

6、inal“,“finally“,“float“,“for“,“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“; /定义一个保存运算符的

7、字符串数组String operators=new String“=“,“+“,“-“,“*“,“/“,“,“=“,“=“,“!=“,“!“;/定义一个保存界符的字符串数组String delimiter=new String“(“,“)“,“,“,“,“,“;“,“/*“,“*/“,“/“;/定义一个判断字符串是否为关键字的函数public boolean isKeyWords(String str)for(int i=0;i“+“n“);else if(lex.isDelimiter(str)System.out.print(“+“n“);else if(lex.isConstants(s

8、tr)System.out.print(“+“n“); else if(lex.isOperators(str)System.out.print(“+“n“); else if(lex.isIdentifiers(str)System.out.print(“+“n“);elseSystem.out.print(“无法识别“+str+“+“n“); if(str.equals(null)break;四、实验结果及总结:四、实验结果及总结:输出:输出:总结:总结:通过该实验,主要有以下几方面收获:一、 对实验原理有更深的理解。二、对词法分析在实践中的应用有深刻的理解。在实践的基础上,把所学过的知识应用于实际应用,更深刻的理解了词法分析以及编译原理的实际应用。三、程序功能还太单一,个人水平有限,还有很多功能待进一步的完善。

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

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号