实验13《编译原理》词法分析程序设计方案Word文档格式.docx

上传人:b****1 文档编号:13326872 上传时间:2022-10-09 格式:DOCX 页数:19 大小:65.69KB
下载 相关 举报
实验13《编译原理》词法分析程序设计方案Word文档格式.docx_第1页
第1页 / 共19页
实验13《编译原理》词法分析程序设计方案Word文档格式.docx_第2页
第2页 / 共19页
实验13《编译原理》词法分析程序设计方案Word文档格式.docx_第3页
第3页 / 共19页
实验13《编译原理》词法分析程序设计方案Word文档格式.docx_第4页
第4页 / 共19页
实验13《编译原理》词法分析程序设计方案Word文档格式.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

实验13《编译原理》词法分析程序设计方案Word文档格式.docx

《实验13《编译原理》词法分析程序设计方案Word文档格式.docx》由会员分享,可在线阅读,更多相关《实验13《编译原理》词法分析程序设计方案Word文档格式.docx(19页珍藏版)》请在冰豆网上搜索。

实验13《编译原理》词法分析程序设计方案Word文档格式.docx

4

5

6

7

8

9

单词

int

char

float

void

const

for

if

else

then

单词助记符

int

float

const

for

else

then

内码值

-

10

11

12

13

14

15

16

17

18

while

switch

break

begin

end

标识符

数字(包括整数和实数)

while

switch

break

begin

end

id 

num

在符号表中的位置

在常数表中的位置

19

20

21

22

23

24

25

26

27

+

*

/

%

[

]

28

28

29

30

!

=

<

>=

==

;

}

rlop

{

>

37

38

39

40

41

42

43

44

45

/=

+=

-=

*=

%=

||

&

/=

or

and

not

单词的构词规则:

字母=[A-Za-z]

数字=[0-9]

标识符=(字母|_)(字母|数字)*

数字=数字(数字)*(.数字+|ε)

四、S语言表达式和语句说明

ﻩ1.算术表达式:

+、-、*、/、%

ﻩ2.关系运算符:

、>

=、<

、<

=、==、!

3.赋值运算符:

=,+=、-=、*=、/=、%=

ﻩ4.变量说明:

类型标识符 变量名表;

5.类型标识符:

int char float

ﻩ6.If语句:

if表达式then语句 [else 语句]

ﻩ7.For语句:

for(表达式1;

表达式2;

表达式3)语句

ﻩ8.While语句:

while 表达式do 语句

9.S语言程序:

由函数构成,函数不能嵌套定义。

函数格式为:

返回值  函数名(参数)

数据说明

语句

五、程序参考结构说明

ﻩ1.Initscanner函数:

程序初始化:

输入并打开源程序文件和目标程序文件,初始化保留字表

2.Scanner函数:

若文件未结束,反复调用lexscan函数识别单词。

3.Lexscan函数:

根据读入的单词的第一个字符确定调用不同的单词识别函数

4.Isalpha函数:

识别保留字和标识符

5.Isnumber函数:

识别整数,如有精力,可加入识别实数部分工功能

6.Isanotation函数:

处理除号/和注释

7.Isother函数识别其他特殊字符

8.Output函数:

输出单词的二元式到目标文件,输出格式(单词助记符,单词内码值),如(int,-)(rlop,>

)……

9.Error函数:

输出错误信息到屏幕

10.除此之外,还可以设置查符号表,填写符号表等函数,学生可自行设计。

实验中,可以将某些类型的单词识别过程利用DFA算法实现,DFA算法参考如下:

DFA(S=S0,MOVE[][],F[],ALPHABET[],ALLS[])

/*S为状态,初值为DFA的初态,MOVE[][]为状态转换矩阵,F[]为终态集,ALPHABET[]为字母表,其中的字母顺序与MOVE[][] 中列标题的字母顺序一致。

ALLS[]为状态集*/

Char Wordbuffer[10]=“”//单词缓冲区置空

Nextchar=getchar();

//读字符

i=0;

while(nextchar!

=NULL)//NULL代表此类单词

{if(nextchar!

∈ALPHABET[]){ERROR(“非法字符”),return(“非法字符”);

 S=MOVE[S][nextchar]//下一状态

if(S=NULL)return(“不接受”);

//下一状态为空,不能识别,单词错误

wordbuffer[i]=nextchar;

 //保存单词符号

 i++;

nextchar=getchar();

Wordbuffer[i]=‘\0’;

If(S∈F)return(wordbuffer);

//接受

 Else return(“不接受”);

六、实验过程说明

1.每人单独完成。

2.完成后,由老师验收,并给出成绩。

3.实验完成后,写出实验报告(要求交打印稿)。

报告内容要求如下:

完成人:

班级、学号、姓名

一、实验名称:

简化S语言词法分析器

二、实验目的:

通过手工编写简化C语言词法分析器,熟悉并深入理解编译程序词法分析器的工作原理。

三、实验内容:

1.根据保留字和特殊符号表能区分出源文件中的保留字、普通标识符和特殊符号,并能进行简单的错误处理。

…………

七、测试源程序示例:

//aa.c

voidaa()

floatrate,circle;

rate=3;

circle=3.14*rate*rate;

输出结果:

(1)输出结果文件:

(void,-)(id,0)((,-)(),-) ({,- ) (float,-)(id,1)……

(2)标识符的符号表:

  Name     type    address

aa

rate

circle

3

(3)常数表:

       Name  value   

3.14

实验地点:

教10五楼计算机学院软一机房

实验时间:

第4周周二3单元、周四1单元、第五周周二3单元

八、实验代码

#include<

stdio.h>

#include<

stdlib.h>

#include<

ctype.h>

#include<

string.h>

#defineMAX10//保留字符号长度

#defineMAXSIZE45//保留字和特殊符号表长度

#defineNUM30//标识符和常数的个数

FILE*in,*out;

// 指向文件的指针

charinfile[MAX];

//文件名字

char token[MAX];

char Word[NUM][MAX];

//标识符

char consts[NUM][MAX];

//常数

charlownum[NUM][MAX]={"

0"

,"

1"

"2"

"3"

"

4","

5","

6"

7"

8"

9",

ﻩﻩﻩ"

10"

11"

12","

13"

14"

"15"

16"

17"

18"

"19"

ﻩ"

20"

21","22"

23"

"24","25"

26","

27"

28","29"};

//自定义表

intn=1;

//行号

intnum=0;

//错误统计数

typedef structKey_word//保留字和特殊符号表结构

ﻩ//int keyNum;

charkeyWord[MAX];

charkeySign[MAX];

ﻩcharkeyValue[MAX];

}Key_word;

//初始化保留字表

Key_wordKey[MAXSIZE]={{"int"

int"

-"

},{"

char"

},{"

float"

,"float"

-"

},

ﻩﻩﻩﻩ{"

void"

void"

"-"

const"

,"const"

},{"

for","

for"

-"},

ﻩ{"

if"

"if"

-"},{"

else"

else"

then"

then"

-"},

ﻩﻩﻩ{"

while"

-"},{"

switch"

switch","-"

break","

ﻩﻩﻩ{"begin"

begin"

end","

end"

},{""

""

"

ﻩﻩﻩ{"

","

","

id"

},{"

num"

ﻩﻩ{"

+","

+"

-","-"

"-"

},{"

*","*","

/"

%","

%"

},{"

("

"("

ﻩ{"

)"

")"

-"},{"

[","

["

]"

},

ﻩﻩﻩﻩﻩ{"","","

rlop"

"<

"},{"

rlop","

ﻩﻩﻩ{"

=","rlop","

<="},{">=","

rlop","

>="

=","rlop"

"="

ﻩﻩﻩﻩ{"!

="

rlop","

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 调查报告

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1