编译原理实习报告-read

编译原理实习报告-read

ID:33704010

大小:97.28 KB

页数:7页

时间:2019-02-28

编译原理实习报告-read_第1页
编译原理实习报告-read_第2页
编译原理实习报告-read_第3页
编译原理实习报告-read_第4页
编译原理实习报告-read_第5页
资源描述:

《编译原理实习报告-read》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、编译实习题——构造一个小语言的词法分析程序编译原理实习报告——编程实现一个小语言的词法分析器一.实习题目及实习要求实习题:构造一个小语言的词法分析程序。实习文法:G[<程序>]:<程序>∷=<程序首部>;<分程序>.<程序首部>∷=program<标识符><分程序>∷=<复合语句><复合语句>∷=begin<语句序列>end<语句序列>∷=<语句>{;<语句>}<语句>∷=<赋值语句>

2、<复合语句>

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

4、-)<

5、项>}<项>∷=<因式>{(*

6、/)<因式>}<因式>∷=<标识符>

7、<无正负号常量>

8、’(’<表达式>’)’<布尔表达式>∷=<表达式><关系运算符><表达式><关系运算符>∷==

9、<

10、<=

11、>

12、>=

13、<><标识符>∷=<字母>{<字母>

14、<数字>}<无正负号常量>∷=<数字>{<数字>}[.<数字>{<数字>}]<字母>∷=a

15、b

16、c

17、d

18、e

19、f

20、g

21、⋯⋯

22、u

23、v

24、w

25、x

26、y

27、z<数字>∷=0

28、1

29、2

30、3

31、4

32、5

33、6

34、7

35、8

36、9根据此文法,构造一词法分析程序。输入以“#”为结束符的源程序,输出为各类单词表和单词串文件。要求:源程序和输出的单词串均

37、以文件的形式存放。单词的自身值均为其对应的表的指针,如标识符表的指针、常数表的指针等。提交:实习报告、程序运行结果。二.实习中相关的原理和术语1.词法分析器:编译程序中完成中词法分析任务的程序段,它负责对源程序进行扫描,从中识别出一个个的单词符号,因此,词法器又称为扫描器。2.单词符号:程序设计语言中的基本语法单位和最小语义单位。单词符号一般分为五类:①关键字,如if,then,else,while,do,begin和end等②标识符,用于表示变量名和过程名等③常数,如整数123,实数45.67④运算符,如+、-、*、/、>、<、=等⑤界限符,如逗号

38、、分号和括号等。3.机内码:经词法分析器识别的单词在计算机内的表示形式,一般为单词类别单词自身值由于语言中的关键字、运算符和界限符的数量都是确定的,因此,对这些单词符国际软件学院2000级二班熊毅学号:2000325800871编译实习题——构造一个小语言的词法分析程序号可采用一符一个单词类别码,这样这些单词符号的自身值就不必给出了。4.状态转换图:一个有向图,仅包含有限个结点,每个结点表示一个状态,其中一个初态结点,至少有一个终态结点,结点间弧的标记可以是输入字符或字符类,如下图:字母或数字11字母其它字符012三.实验步骤1.根据文法生成各类单词

39、的状态转换图,由以上论述可知,单词符号分为五种类型,则所生成的状态转换图也应该能识别此五种类型的单词符号。状态转换图如下所示:空格数字—数字非数字+常012非数字小数点.数字数34字母或数字数字字母非字母、数字+56标识符和关键字==+78非等号+9<=+1011>+12非=和>13>=+1415非等号+16++17─+18*+19/+20;+21:=+2223其他+24国际软件学院2000级二班熊毅学号:2000325800872编译实习题——构造一个小语言的词法分析程序2.根据上面的识别各类符号的状态转换图编写词法分析程序在初态结点,需读入一个输

40、入字符,如果输入的是空格,则将它过滤掉,再读入下一个输入字符。以下是根据上面的状态转换图用C语言写的词法分析原程序:#include#include#include#defineMAX50voidmain(){FILE*in,*out;/*存放输入字符串和输出单词串的文件*/chararr[MAX];/*arr数组存放单词符号*/charcurrentchar;/*currentchar存放当前输入字符*/inti=0;/*arr数组的一个指针*//*以读方式打开输入文件*/if((in=f

41、open("inflie.txt","r"))==NULL){printf("cannontopeninfile");exit(0);}/*以写方式打开输出文件*/if((out=fopen("outfile.txt","w"))==NULL){printf("cannoutopenoutfile");exit(1);}/*过滤掉开始的空格*/currentchar=fgetc(in);while(currentchar=='')currentchar=fgetc(in);/*判断常数部分*/if(currentchar>='0'&&curr

42、entchar<='9'){arr[i++]=currentchar;currentchar=fgetc(i

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

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

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