编译原理试验-词法分析器的设计与实现0001.docx

编译原理试验-词法分析器的设计与实现0001.docx

  1. 1、本文档共38页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
地点教师 地点教师 地点教师 地点教师 南华大学 计算机科学与技术学院 实验报告 (2018-2019学年度 第二学期) 编译原理课程名称 词法分析器的设计与实验名称 实现 姓名 学号 专业班级 实验目的及要求 实验目的 加深对词法分析器的工作过程的理解;加强对词法分析方法的掌握;能够釆用一 种编程语言实现简单的词法分析程序;能够使用自己编写的分析程序对简单的程 序段进行词法分析。 实验要求 对单词的构词规则有明确的定义; 编写的分析程序能够正确识别源程序中的单词符号; 3识别出的单词以v种别码,值〉的形式保存在符号表中,正确设计和维护符号 表; 4.对于源程序中的词法错误,能够做出简单的错误处理,给出简单的错误提示, 保证顺利完成整个源程序的词法分析; 实验步骤 1?词法分析规则 V标识符 >::二V字母>|<标识符>< 字母>|V标识符>V数字〉 V常数〉::二V数字>|V数字序列 >< 数字〉 V数字序列〉::= < 数字序列〉V数字>|v数字>|<-> V 字母>::=a|b|c|……|x|y|z v 数字 >::二0 山 2|3|4|5|6|7|8|9 V运算符〉;:二V关系运算符>|V算术运算符>|V逻辑运算符>|<位运算符〉|V赋值运 算符〉 V 算数运算符 >::=+ |-|*|/|,..|- v 关系运算符 >::=<|>|! = |> = |< = |== v逻辑运算符〉::二&&||||! V位运算符 >::二&|||! V 赋值运算符 >::==| + = |- = |/=|*= V分界符>::=,|;|(|)|{|}|: |//|/-/ v 保留字 >::=main|if|else|while|do|for|...|void 2?单词符号的编码 单词符种别单词符种别 26>0main 271>=if 282else< 29while3< = 13 13 13 13 30do4! 31for!=5 326switch = 33==case7 8 int( 9 double) float 10 { long} 11 void 12 ; 39 40 114+ = 41||15+ + 42 数 16- 43标识17-二 4418--, 45&//19 46&&20/**/ #21 *22 23*= /24 / 二 25 状态转换图3.. 5 5 5 5 =1 丫母与数字空白 非字血与盘字字2 0 1 3其/ /a + Mh 10 =12 + 13 其14 15 =16 > 其山 19 <其20 21 (&?22 f 算法分析4.①词法分析器工作的第一步是输入源程序文本。为了更好地对单词 符号识别,把输入串预处理一下。预处理主要滤掉空格,跳过注释、换行符等。 嵌套语句和if-while②对预处理后的输入串依次扫描单个字符,使用语句判断字 符的类型,具体识别方法可看状态转换图。有时switch case为了确定词性,需 要超前扫描,若超前扫描的字符对识别当前单词无用? 处,则需要退还给输入串,以备识别下一单词字符时使用。 ③若读入的字符与单词符号编码表的字符匹配不上,则报错,并输出出错行数。 对识别处的单词符号以(单词符号,种别码)二元式的形式输出。 实验内容 1.流程图 2.程序的变量与函数说明 (1) in put 全局字符数组,用来存放输入串 <2) word 全局字符数组,用来存放获取到的单词符号,限定长度为8 (3) ch 全局字符变量,用来存放最新读入的字符 (4) syn 全局整型变量,表示单词符号的编码 (5) p 全局整型变量,表示当前字符在input数组的位置 < 6)m 全局整型变量,表示最新读入的字符在 全局整型变量, 表示最新读入的字符在word数组的下标 <7) line 全局整型变量,当前行数 (8) keyword 全局字符数组,存放关键字 (9) initO 获取输入串 (10) isKeyQ 判断关键字的函数,若参数数组中是关键字,则把syn置为该关键字对应的编码 并返回1,否则返回0 (11) isLetter() 判断字母的函数,若参数字符是字母,则返回1,否则返回0 (12) isDigitO 判断数字的函数,若参数字符是数字,则返回1,否则返回0 < 13) isSpaceQ 判断空白符的函数,若参数字符是空格、TAB或换行符,则返回1,否则返回0 < 14) scanerO 扫描输入串的函数,对读出的字符进行判断,若是单词符号表中的符号,则将 syn置为对应的编码 3.源程序 #include <stdio.h> #include <string.h〉 char in put [1OOO];// 输入串 char word[8];//获取到的单词

文档评论(0)

guoxiachuanyue + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档