编译原理词法分析器.docxVIP

  • 20
  • 0
  • 约9.06千字
  • 约 19页
  • 2021-01-26 发布于天津
  • 举报
探 < 实验一词法分析> 一、 实验目的: 通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序 设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。 编制一个读单词过程, 从输入的源程序中, 识别出各个具有独立意义的单词, 即基本保留字、 标识符、 常数、运算符、分隔符五大类。 并依次输出各个单词的内部编码及单词符号自身值。 (遇 到错误时可显示“ Error ”,然后跳过错误部分继续显示) 二、 实验预习提示 1、 词法分析器的功能和输出格式 词法分析器的功能是输入源程序, 输出单词符号。 词法分析器的单词符号常常表示成以 下的二元式 ( 单词种别码,单词符号的属性值 ) 。本实验中, 采用的是一类符号一种别码 的方式。 2、 单词的 BNF 表示 <标识符 - < 字母 <字母数字串 <字母数字串 - <字母 <字母数字串 |< 数字 <字母数字串 | V下划线 <字母数字串I £ <无符号整数 - < 数字 <数字串 <数字串- < 数字 <数字串 | £ <加法运算符 -+ <减法运算符 -- V大于关系运算符 - V大于等于关系运算符 - = 3、 “超前搜索”方法 词法分析时, 常常会用到超前搜索方法。 如当前待分析字符串为 “a +”, 当前字符为 , 此时, 分析器倒底是将其分析为大于关系运算符还是大于等于关系运算符呢?显然, 只有知道下 一个字符是什么才能下结论。于是分析器读入下一个字符 +,这时可知应将 解释为大 于运算符。但此时,超前读了一个字符 +,所以要回退一个字符, 词法分析器才能正常运行。 在分析标识符,无符号整数等时也有类似情况。 4、模块结构 三、实验过程和指导:(一)准备:阅读课本有关章节,明确语言的语法,写岀基本保留字、标识符、常数、运算符、分隔符和程 序例。初步编制好程序。准备好多组测试数据 三、实验过程和指导: (一)准备: 阅读课本有关章节,明确语言的语法,写岀基本保留字、标识符、常数、运算符、分隔符和程 序例。 初步编制好程序。 准备好多组测试数据 二)上课上机: 将源代码拷贝到机上调试,发现错误,再修改完善。 第二次上机调试通过。 (三)程序要求: 程序输入 / 输出示例: 如源程序为 C 语言。输入如下一段: main() { int a,b; a = 10; b = a + 20; } 要求输出如右图 要求: 识别保留字:if、int、for、while、do、return、break、continue ; 单词种别码为1。 其他的都识别为标识符;单词种别码为 2。 常数为无符号整形数;单词种别码为 3。 运算符包括:+、-、*、/、=、 、<、 =、<=、!=; 单词种别码为4。 分隔符包括:,、;、{、}、(、);单词种别码为5 以上为参考,具体可自行增删。 (四)程序思路(仅供参考): 这里以开始定义的C语言子集的源程序作为词法分析程序的输入数据。 在词 法分析中,自文件头开始扫描源程序字符,一旦发现符合“单词”定义的源程序 字符串时,将它翻译成固定长度的单词内部表示, 并查填适当的信息表。经过词 法分析后,源程序字符串(源程序的外部表示)被翻译成具有等长信息的单词串 (源程序的内部表示),并产生两个表格:常数表和标识符表,它们分别包含了 源程序中的所有常数和所有标识符。 0. 定义部分:定义常量、变量、数据结构。 初始化:从文件将源程序全部输入到字符缓冲区中。 取单词前:去掉多余空白。 取单词后:去掉多余空白(可选,看着办)。 取单词:利用实验一的成果读出单词的每一个字符, 组成单词,分析类型。(关 键是如何判断取单词结束?取到的单词是什么类型的单词?) 5. 显示结果。 (五)练习该实验的目的和思路: 程序开始变得复杂起来, 可能是大家目前编过的程序中最复杂的, 但相对于 以后的程序来说还是简单的。因此要认真把握这个过渡期的练习。 本实验和以后的实验相关。通过练习,掌握对字符进行灵活处理的方法。 (六)为了能设计好程序,注意以下事情: 模块设计:将程序分成合理的多个模块 (函数),每个模块做具体的同一事情。 写出(画出)设计方案:模块关系简图、流程图、全局变量、函数接口等。 编程时注意编程风格:空行的使用、注释的使用、缩进的使用等。 X实验二递归下降分析法> 一、 实验目的: 根据某一文法编制调试递归下降分析程序,以便对任意输入的符号串进行分析。本次实验的 目的主要是加深对递归下降分析法的理解。 二、 实验预习提示 1、递归下降分析法的功能 词法分析器的功能是利用函数之间的递归调用模拟语法树自上而下的构造过程。 2、递归下降分析法的前提 改造文法:消除二义性、消除左递归、提取左因子,判断是否为 LL( 1)文法, 3、递归

文档评论(0)

1亿VIP精品文档

相关文档