收藏 分享(赏)

实验一 词法分析程序的设计与实现.doc

上传人:精品资料 文档编号:10197034 上传时间:2019-10-18 格式:DOC 页数:6 大小:138.50KB
下载 相关 举报
实验一  词法分析程序的设计与实现.doc_第1页
第1页 / 共6页
实验一  词法分析程序的设计与实现.doc_第2页
第2页 / 共6页
实验一  词法分析程序的设计与实现.doc_第3页
第3页 / 共6页
实验一  词法分析程序的设计与实现.doc_第4页
第4页 / 共6页
实验一  词法分析程序的设计与实现.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

1、实验一 词法分析程序的设计与实现一、实验内容【实验目的和要求】设计、编制、调试一个具体的词法分析程序,加深对词法分析原理的理解。【实验内容】通过对 PL/0 词法分析程序(GETSYM)的分析,并在此基础上按照附录 A 中给出的PL/0 语言的语法描述,编写一个 PL/0 语言的词法分析程序。此程序应具有如下功能:输入为字符串(待进行词法分析的源程序) ,输出为单词串,即由(单词、类别)所组成的二元组序列。有一定检查错误的能力,例如发现 2A 这类不能作为单词的字符串。【实验环境】Windows PC 机,任何语言。【提交内容】提交实验报告,报告内容如下:目的要求、算法描述、程序结构、主要变量

2、名说明、程序清单、调试情况、设计技巧、心得体会。提交源程序和可执行文件。【学时】4 课时。二、实验说明词法分析程序的任务就是扫描源程序,依据词法规则识别单词并报告构词错误信息。通常将单词分为 5 种类型。1)基本字:也叫关键字、保留字,是程序设计语言用来表示特定语法含义的一种标识符,如 if、begin 等。2)运算符:如+、-、*、/、:=、“ ;/ 关系符 2static public String relation2 = “=“, “ ;static public boolean isOver = false;/处理一个字母开头的词static private char alphapro

3、cess(char buffer) throws Exception int i = -1;StringBuffer sb = new StringBuffer();char temp = buffer;while (Character.isLetter(temp) | Character.isDigit(temp) sb.append(temp);if(temp = (char) reader.read() = -1) isOver = true;if(!search(sb.toString(), 1)search(sb.toString(),2);return temp;/处理数字开头的词

4、static private char digitprocess(char buffer) throws Exception StringBuffer sb = new StringBuffer();char temp = buffer;while(Character.isDigit(temp)sb.append(temp);if(temp = (char) reader.read() = -1) isOver = true;search(sb.toString(), 3);/处理一个数字return temp;/其他字符static private char otherprocess(cha

5、r buffer) throws Exception StringBuffer sb = new StringBuffer();char temp = buffer;sb.append(temp);if(temp = (char) reader.read() = -1) isOver = true;if(search(sb.toString(), 4)return temp;/界符else if(search(sb.toString(), 5)return temp;/运算符else if(search(sb.toString(), 6)return temp;/关系符 1sb.append(

6、temp);if(search(sb.toString(), 7)if(temp = (char) reader.read() = -1) isOver = true;return temp;static private boolean search(String buffer, int wordtype) int i = 0;switch (wordtype) case 1:/确定是否为保留字for(int j=0;jkeyWords.length;j+)if(keyWordsj.equals(buffer)System.out.println(buffer+“保留字“+j);return

7、true;return false;case 2:/标示符,直接打印System.out.println(buffer+“标示符,长度“+buffer.length();return true;case 3:/数字System.out.println(buffer+“数字“+buffer.length();return true;case 4:/是否界符for(int j=0;jborders.length;j+)if(bordersj.equals(buffer)System.out.println(buffer+“界符“+j);return true;return false;case 5

8、:/是否运算符for(int j=0;jarithmetic.length;j+)if(arithmeticj.equals(buffer)System.out.println(buffer+“运算符“+j);return true;return false;case 6:/关系符号 1for(int j=0;jrelation1.length;j+)if(relation1j.equals(buffer)System.out.println(buffer+“关系符“+j);return true;return false;case 7:/关系符号 1for(int j=0;jrelation

9、2.length;j+)if(relation2j.equals(buffer)System.out.println(buffer+“关系符“+j);return true;return false;default:System.out.println(buffer+“未知“);return false;/* param args* throws Exception */public static void main(String args) throws Exception reader = new InputStreamReader(new FileInputStream(“d:/source.c“);char cbuffer;cbuffer = (char) reader.read();while(!isOver)if (Character.isLetter(cbuffer) cbuffer=alphaprocess(cbuffer); else if (Character.isDigit(cbuffer) cbuffer=digitprocess(cbuffer); else cbuffer=otherprocess(cbuffer);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报