C语言词法分析器实验报告Word文件下载.doc

上传人:b****1 文档编号:13105492 上传时间:2022-10-05 格式:DOC 页数:22 大小:803KB
下载 相关 举报
C语言词法分析器实验报告Word文件下载.doc_第1页
第1页 / 共22页
C语言词法分析器实验报告Word文件下载.doc_第2页
第2页 / 共22页
C语言词法分析器实验报告Word文件下载.doc_第3页
第3页 / 共22页
C语言词法分析器实验报告Word文件下载.doc_第4页
第4页 / 共22页
C语言词法分析器实验报告Word文件下载.doc_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

C语言词法分析器实验报告Word文件下载.doc

《C语言词法分析器实验报告Word文件下载.doc》由会员分享,可在线阅读,更多相关《C语言词法分析器实验报告Word文件下载.doc(22页珍藏版)》请在冰豆网上搜索。

C语言词法分析器实验报告Word文件下载.doc

==;

()等

(3)其他单词是标识符(ID)和整型常数(SUM),通过以下正规式定义:

ID=_|letter(letter|digit)*

NUM=digitdigit*

(4)空格有空白、制表符和换行符组成。

空格一般用来分隔ID、SUM、运算符、界符和关键字,词法分析阶段通常被忽略。

(5)注释被忽略

(6)各种单词符号对应的种别码(如下):

单词符号

种别码

auto

1

double

2

int

3

struct

4

break

5

else

6

long

7

switch

8

case

9

enum

10

register

11

typedef

12

char

13

extern

14

return

15

union

16

const

17

float

18

short

19

unsigned

20

continue

21

for

22

signed

23

void

24

default

25

goto

26

sizeof

27

volatile

28

do

29

while

30

static

31

if

32

\a

33

\b

34

\f

35

\n

36

\t

37

\v

38

\\

39

\?

40

\’

41

\”

42

\0

43

\ddd

44

\xhh

45

数字

46

标识符

47

#

48

49

50

[

51

]

52

{

53

}

54

55

*

56

:

57

~

58

%

59

^

60

+

61

?

62

=

63

|

64

&

65

!

66

<

67

68

69

==

70

71

72

73

74

75

||

76

++

77

78

-

79

--

80

->

81

82

%A(A可为d’s’c)

83

;

84

_

85

/

86

87

88

89

90

91

其他类别

99

实验流程图(由于流程图过大因此各部分分开写):

整体 :

扫描注释:

扫描数字:

扫描引号:

扫描单词:

扫描其他字符:

实验环境:

需要TC、VC++6.0等开发工具作为本次试验的环境。

实验步骤:

1、准备:

用TC、VC++等开发工具;

2、对本实验的任务进行分析,确定实现功能的函数;

3、写好程序,仔细修改函数;

4、上机操作:

输入源程序,修改、调试,运行。

5、写好试验报告。

实验调试过程及测试结果

/*******************************源代码******************************/

#include<

stdio.h>

stdlib.h>

#include<

ctype.h>

string.h>

voidmain()

FILE*fp,*fp1;

inthanjsq=1;

//行计数器,保存行号

intguanjz(charch1[]);

//关键字和标识符判断

charch,infile[15],outfile[15];

//定义输入和输出文件名

printf("

*****************Entertheinfilename*******************\n"

);

scanf("

%s"

infile);

//输入需要扫描的文件名

*****************Entertheoutfilename******************\n"

outfile);

//输入需要另存为的文件名

if((fp=fopen(infile,"

r"

))==NULL)//打开需要扫描的文件

{

printf("

cannotopenfile\n"

exit(0);

}

if((fp1=fopen(outfile,"

w"

))==NULL)//打开需要存入的文件

\n*********************************************************\n"

*》开始进行词法分析《*\n"

*********************************************************\n"

行号 字符串 种别码\n"

fprintf(fp1,"

while(!

feof(fp))

ch=fgetc(fp);

if(ch==10)hanjsq++;

/**********************扫描头文件单词及保留字***********************/

if(isalpha(ch)||ch=='

_'

)//如果第一个字符为字母或下划线则判断为标识符

{

inti=0;

charch1[30];

//假定每个标识符最长为

ch1[i++]=ch;

//将ch保存到ch1[0]中并使i自加1

while(!

{

ch=fgetc(fp);

if(ch==10)hanjsq++;

//如果ch为换行符,则行计数器自加1

if(isalpha(ch)||isdigit(ch)||ch=='

{//如果ch为字母、数字或下划线就把ch放到ch1[i]中并使i自加1

ch1[i++]=ch;

}

if(ch=='

.'

)//如果ch为小数点则判断是否为头文件

{

if((ch=fgetc(fp))=='

h'

)//如果小数点后一位为h则判定其为头文件

{

if(ch==10)hanjsq++;

ch1[i++]='

ch1[i]='

\0'

//把结束标志放到ch1[i]中作为单词结束标志

printf("

line%d:

%s 83\n"

hanjsq,ch1);

//以字符串形式输出ch1

fprintf(fp1,"

break;

}

else//如果小数点后一位不是h则判定其为标识符

fseek(fp,-1,1);

//fp回退1

%s %d\n"

hanjsq,ch1,guanjz(ch1));

if(!

isalpha(ch)&

!

isdigit(ch)&

ch!

='

&

{//如果ch不为字母、数字、下划线和点时判断其为标识符

ch1[i]='

printf("

fprintf(fp1,"

break;

}

}

/************************扫描数字*************************/

if(isdigit(ch)||ch=='

-'

)//如果ch为数字或'

{

if(isdigit(ch))//如果ch为数字

printf("

%c"

hanjsq,ch);

fprintf(fp1,"

while(!

{

ch=fgetc(fp);

//预读一位如果ch为数字和点则循环输出

if(isdigit(ch)||ch=='

%c"

ch);

else/

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

当前位置:首页 > 法律文书 > 辩护词

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

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