实验一 词法分析程序设计

实验一 词法分析程序设计

ID:28506405

大小:105.00 KB

页数:4页

时间:2018-12-11

实验一 词法分析程序设计_第1页
实验一 词法分析程序设计_第2页
实验一 词法分析程序设计_第3页
实验一 词法分析程序设计_第4页
资源描述:

《实验一 词法分析程序设计》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、s实验一词法分析程序设计[实验目的]:1.了解词法分析的主要任务。2.熟悉编译程序的编制。[实验内容]:根据某文法,构造一基本词法分析程序。找出该语言的关键字、标识符、整数以及其他一些特殊符号,给出单词的种类和值。[实验要求]:1.构造一个小语言的文法,例如,Pascal语言子集的文法:G[<程序>]:<程序>→<程序首部>;<分程序>.<程序首部>→program<标识符><分程序>→<常量说明部分><变量说明部分><复合语句><常量说明部分>→CONST<常量定义表><常量定义表>→<常量定义><常量定义表>

2、<常量定义><常量定义>→<标识符>=<无

3、符号整数>;<变量说明部分>→VAR<变量定义表><变量定义表>→<变量定义><变量定义表>

4、<变量定义><变量定义>→<标识符表>:<类型>;<标识符表>→<标识符>,<标识符表>

5、<标识符><类型>→integer

6、real

7、boolean

8、char<分程序>→<复合语句><复合语句>→begin<语句序列>end<语句序列>→<语句>

9、<语句序列>;<语句><语句>→<赋值语句>

10、<复合语句>

11、<条件语句><赋值语句>→<标识符>:=<表达式><条件语句>→if<布尔表达式>then<语句>else<语句><表达式>→<表达式>+<项>

12、<表达式>-

13、<项>

14、<项><项>→<项>*<因式>

15、<项>/<因式>

16、<因式><因式>→<标识符>

17、<无符号整数>

18、(<表达式>)<布尔表达式>→<表达式><关系运算符><表达式><关系运算符>→=

19、<

20、<=

21、>

22、>=

23、<><标识符>→<字母>

24、<标识符><字母>

25、<标识符><数字><无符号整数>→<数字>

26、<无符号整数><数字><字母>→a

27、b

28、c

29、d

30、e

31、f

32、g

33、h

34、i

35、j

36、k

37、l

38、m

39、n

40、o

41、p

42、q

43、r

44、s

45、t

46、u

47、v

48、w

49、x

50、y

51、z<数字>→0

52、1

53、2

54、3

55、4

56、5

57、6

58、7

59、8

60、92.设计单词的输出形式,单词的种类和值的表示方法,例如:keywordprogra

61、mdigit1……3.编写词法分析程序cffx.c实现基本的词法分析器,能够分析关键字、标识符、数字、运算符(需要有“==”或“:=”之类需要超前搜索的运算符)以及其他一些符号。实验报告中要说明分析使用的方法。s1.生成并输出单词符号表1keywordprogram……[实验步骤]:1.写出一个小语言的文法,根据情况自由选择C语言或Pascal语言。2.写出该小语言的单词分类情况表。3.编写词法分析程序。4.调试运行程序。5.结果分析。6.撰写实验报告。[实验报告]:1.写出实现的算法。2.画出流程图。3.实验设计过程中出现的问题及解决的方法。4.实验设计

62、过程中的体会。5.给出程序清单。6.给出测试结果。测试的结果举例词法分析源程序举例#include"stdio.h"#include"conio.h"#include"string.h"#include"ctype.h"charsave[20];/*定义暂存函数*/char*p;charcount[200];inttotal;char*sum[5]={"begin","end","integer","program","var"};/*定义5个关键字*/charalpha()/*分析标识符*/{inti,j;schar*opp;i=0;j=0;/*j=0是

63、标识符,j=1是关键字*//*while(isalpha(*p))/*检查是否是字母*/{save[i]=*p;p++;i++;}*/while(isalnum(*p))/*检查是字母还是数字,如果是字母返回1,是数字返回2*/{save[i]=*p;p++;i++;}opp=save;for(i=0;i<5;i++)/*把字母与关键字表核对,如果是关键字就设置j=1*/if(!(strcmp(opp,sum[i])))/*比较两个字符串*/{printf("%dkeyword%s",total,opp);/*识别关键字*/j=1;}if(j==0)p

64、rintf("%dcaptionsign%s",total,opp);/*识别标识符*/p--;/*回退多读进的字符*/}chardigit()/*分析数字*/{inti;i=0;while(isdigit(*p))/*检查是否数字(0-9)*/{save[i]=*p;i++;p++;}printf("%ddigit%s",total,save);p--;}main(){inti,j;total=1;/*计数器等于一*/memset(count,0,200);/*把count所指内存区域的前200个字节设置成字符0*/clrscr();strcpy

65、(count,"programtest;vari,j:inte

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。