实验一词法分析程序的设计与实现_第1页
实验一词法分析程序的设计与实现_第2页
实验一词法分析程序的设计与实现_第3页
实验一词法分析程序的设计与实现_第4页
实验一词法分析程序的设计与实现_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

精品文档 1欢迎下载 实验一实验一 词法分析程序的设计与实现 一 实验内容一 实验内容 实验目的和要求 设计 编制 调试一个具体的词法分析程序 加深对词法分析原理的理解 实验内容 通过对 PL 0 词法分析程序 GETSYM 的分析 并在此基础上按照附录 A 中给出的 PL 0 语言的语法描述 编写一个 PL 0 语言的词法分析程序 此程序应具有如下功能 输入为字符串 待进行词法分析的源程序 输出为单词串 即由 单词 类别 所组 成的二元组序列 有一定检查错误的能力 例如发现 2A 这类不能作为单词的字符串 实验环境 Windows PC 机 任何语言 提交内容 提交实验报告 报告内容如下 目的要求 算法描述 程序结构 主要变量名说明 程序清单 调试情况 设计技巧 心得体会 提交源程序和可执行文件 学时 4 课时 二 实验说明二 实验说明 词法分析程序的任务就是扫描源程序 依据词法规则识别单词并报告构词错误信息 通常将单词分为 5 种类型 精品文档 2欢迎下载 1 基本字 也叫关键字 保留字 是程序设计语言用来表示特定语法含义的一种标 识符 如 if begin 等 2 运算符 如 等 3 标识符 用户定义的变量名 常数名 函数名等 不同的高级程序设计语言对关 键字是否可以作为普通标识符有不同的要求 有的语言允许程序员使用关键字作为普通标 识符 有的程序设计语言则不允许程序员将关键字用着普通标识符 如 C C Pascal 等 都不允许 在允许程序员将关键字用作普通标识符的程序设计语言的编译器中 编译器 必须具备能够区分一个标识符到底是关键字还是普通标识符的功能 4 常数 如 23 6 等 5 界符 如 等 注意事项注意事项 空格的作用仅仅是将一个个单词分割开来 源程序中的空格不具备别的语法意义 在语法分析及其后续阶段都没有任何作用 因此 词法分析的另一个工作是过滤空格 注释对整个源程序的编译也没有任何语法意义 只是为了便于阅读和交流 因此 有的编译程序的词法分析程序也负责过滤注释 输出的单词符号采用 单词类别 单词自身值 的二元组形式来表示 为了使扫描程序尽可能的高效 在进行词法分析程序的设计和实现时还需十分注 意扫描程序结构的实际细节问题 用于间隔单词的空格和我们通常所说的键盘上的空格是不同的 这里的空格指的 是所有能引起一个单词结束的字符 它们包括空格 制表或回车换行符 a b c 这样的没有空格间隔的情况时要正确地识别出所有的单词 123ab 这样的字符串时 一般字符串的首字符必须为字母 不要将 123 识别为数 字 将 ab 识别为标识符 转换图说明转换图说明 精品文档 3欢迎下载 程序代码参考程序代码参考 package cffx import java io FileInputStream import java io IOException import java io InputStreamReader import java io Reader SuppressWarnings unused public class shiyan1 static public Reader reader null 关键字 static public String keyWords if else for while do return break continue 界符 static public String borders 运算符 static public String arithmetic 关系符 1 static public String relation1 关系符 2 static public String relation2 精品文档 4欢迎下载 static public boolean isOver false 处理一个字母开头的词 static private char alphaprocess 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 处理数字开头的词 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 char 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 关系符 1 sb append temp if search sb toString 7 if temp char reader read 1 精品文档 5欢迎下载 isOver true return temp static private boolean search String buffer int wordtype int i 0 switch wordtype case 1 确定是否为保留字 for int j 0 j keyWords length j if keyWords j equals buffer System out println buffer 保留字 j return 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 j borders length j if borders j equals buffer System out println buffer 界符 j return true return false case 5 是否运算符 for int j 0 j arithmetic length j if arithmetic j equals buffer System out println buffer 运算符 j return true return false case 6 关系符号 1 for int j 0 j relation1 length j if relation1 j equals buffer System out println buffer 关系符 j return true 精品文档 6欢迎下载 return false case 7 关系符号 1 for int j 0 j relation2 length j if relation2 j 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 a

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论