实验一 词法分析程序的设计与实现 一、实验目的:词法分析程序是编译程序的一个构成成分,它的主要任务是扫描源程序,按构词规则识别单词,并报告发现的词法错误。其中涉及到的主要理论和技术是正则表达式(也叫正规式:regular expression)和有穷自动机(finite automata)。本实验是让学生根据所给的某一较为简单的语言的单词,完成该语言的词法分析程序的设计、编写和调试,并在此过程中掌握相关的理论和方法技术。 二、要求: (1) 按照下面给出的语言单词,编制一个词法分析程序,该程序应该具有以下功能: (a)输入字符串(待进行词法分析的源程序),输出为单词串,即由(单词、类别)所组成的二元组序列。 (b)有一定的检查错误的能力。 (2) 提交实验报告。报告内容如下:实验目的、算法描述、程序结构、程序清单、主要变量名说明、调试情况、设计技巧、心得体会。 (3) 上机时间:4~6小时 三、实验环境:PC机,Windows系列版本,任何版本的C语言。 四、词法分析实验题目:设某一语言有如下单词: 关键字:BEGIN , END , IF , THEN ,ELSE 标识符 无符号整常数 运算符: < ,<= , = ,<> ,> , >= 请编写出识别该语言的词法分析程序。 提示: 1、实验步骤: 正规文法→NFA → DFA →程序流程图→编写代码 2、要建立数组,存放输入字符串 3、搜索注意①超前搜索和回退字符②检查错误; 4、注意不同类型的单词的截止标记。 一个关键字往往以空格和界限符等结束; 一个标识符往往以运算符、空格和界限符等结束; 一个常数往往以运算符和界限符等结束; 一个运算符存在双字符运算符,只须向前搜索一个字符; 一个界限符只有一个字符。 五、考核标准 本实验目的在于让学生更加深入地掌握词法分析所要完成的工作以及词法分析程序在整个编译过程中担任的角色,并通过编写、调试、运行一个完整的词法分析程序掌握编写词法分析程序的基本理论和基本方法。本试验的考核标准为,在提交完整详尽的试验报告以及比较详尽地讲解程序的组织、功能运行结果的基础上,可以按照下列意见来评定: 1、不能完成基本的单词的识别为不合格; 2、基本完成词法分析所要求的对各类单词的识别并且分类输出为合格; 3、完全地完成所输入的字符流中的单词的识别并分类输出,同时具有一定的错误检查能力为良好; 4、完全地完成所输入的字符流中的单词的识别并分类输出,同时具有相当强的错误检查能力,甚至有一定的自动纠错能力为优秀; 另外,程序的算法以及设计方面有创新或者功能上有更好的改进的应考虑适当提高成绩。 实验一 LL(1)分析法 一、实验目的 设计、调试一个典型的语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,进一步掌握常用的语法分析方法。 语法分析是编译程序的核心部分,它的主要任务是识别由词法分析所输出的单词符号序列是否是给定文法的正确句子。对于上下文无关文法来说,其语法分析方法主要有两种:自顶向下语法分析和自底向上语法分析。自顶向下语法分析又可分为确定的和不确定的两种,确定的分析方法需要对文法有一定的限制,但是由于实现方法简单、直观,便于手工构造或自动生成语法分析器,因而是目前最常用的方法之一。 LL(1)分析法即为确定的自顶向下分析法。能够使用自顶向下分析法必须使文法满足一定的条件,即LL(1)文法。其中第一个L表明自顶向下分析是从左向右扫描输入串,第二个L表明分析过程中将用最左推导,而1则表明只需要向右看一个符号便可以决定如何推导即选择哪个规则进行推导。 二、要求

评论