- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理 实验 2 词法分析器
一、实验目的
1. 通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。
2. 掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方
法。
3. 编制一个读单词的程序, 从输入的源程序中, 识别出各个具有独立意义的单词, 即
基本保留字、标识符、常数、运算符和分隔符五大类。并依次输出各个单词的内部编码及单
词符号自身值。 (遇到错误时可显示“ Error ”,然后跳过错误部分继续显示)
二、词法分析的基础知识
1. 词法分析器的功能和输出格式
词法分析器的功能是输入源程序, 输出单词符号。 词法分析器的单词符号常常表示
成以下的二元式 ( 单词种别码, 单词符号的属性值 ) 。在本实验中, 采用的是一类符号一
种别码的方式。
标识符的 BNF表示:
标识符 - 字母 字母数字串
字母数字串 - 字母 字母数字串 | 数字 字母数字串 | ε
无符号整数的 BNF表示:
无符号整数 - 数字 数字串
数字串 - 数字 数字串 | ε
运算符的 BNF表示:
加法运算符 - +
减法运算符 - -
大于关系运算符 -
大于等于关系运算符 - =
2. 超前搜索
词法分析时,常常会用到超前搜索方法。如当前待分析字符串为“ a i ”,当前字
符为“ ”,此时,分析器到底是将其分析为大于关系运算符还是大于等于关系运算符呢?
显然, 只有知道下一个字符是什么才能下结论。于是分析器读入下一个字符 “+ ”,这时
可知应将“ ”解释为大于运算符。但此时,超前读了一个字符“ i ”,所以要回退一个
字符,词法分析器才能正常运行。在分析标识符,无符号整数等时也有类似情况。
三、程序要求
1. 程序输入示例:
如源程序为 C 语言,输入如下一段:
main()
{
int a, b;
a = 10;
b = a+20;
}
2. 程序输出示例:
(2 ,“main ”)
(5 ,“(”)
(5 ,“)”)
(5 ,“{ ”)
(1,“int ”)
(2 ,“a ”)
(5 ,“, ”)
(2 ,“b ”)
(5 ,“; ”)
(2 ,“a ”)
(4 ,“= ”)
(3 ,“10 ”)
(5 ,“; ”)
(2 ,“b ”)
(4 ,“= ”)
(2 ,“a ”)
(4 ,“+ ”)
(3 ,“20 ”)
(5 ,“; ”)
(5 ,“} “)
3. 具体要求如下:
(1)识别保留字: if 、int 、for 、while 、do 、return 、break 、continue 等。
(2 )运算符包括: +、- 、* 、/ 、=、、、=、=、!=
(3)分隔符包括: , 、; 、{ 、} 、( 、)
(4 )常数为无符号整形数;
(5)其它的都识别为标识符;
4. 程序思路:
(1
文档评论(0)