c语言词法分析程序试验报告,C语言词法分析程序设计与实现实验报告.doc

计算机科学与工程系

编译原理课程设计实验报告

姓名:__ ******__ 学号_ *******__ 年级专业及班级___08计算机科学与技术 成绩

实验名称

词法分析程序设计与实现

完成日期2011/4/12指导教师*******实验目的:能够采用C编程语言实现简单的词法分析程序;设计、编制并调试一个词法分析程序,加深对词法分析原理的理解

实验要求: 1. 对单词的构词规则有明确的定义;

2. 编写的分析程序能够正确识别源程序中的单词符号;

3. 识别出的单词以的形式保存在符号表中(链表);

4. 词法分析中源程序的输入以.c格式,分析后的符号表,将二元组保存在.txt文件中。实验内容:选择高级语言(C语言),编制它的词法分析程序。词法分析程序的实现可以采用任何一种编程工具

实验原理:1、算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号;

2、其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。

实验分析:(1)关键字:if else while do case int break等所有的关键字都是小写。

(2)运算符和界符: = + - * / < <= <> > >= = ; ( ) 等

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

ID = _ | letter (letter | digit)*

NUM = digit digit*

(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

#include

#include

#include

void main()

{

FILE *fp,*fp1;

int hanjsq=1;//行计数器,保存行号

int guanjz(char ch1[]);//关键字和标识符判断

char ch,infile[15],outfile[15];//定义输入和输出文件名

printf("*****************Enter the infile name*******************\n");

scanf("%s",infile);//输入需要扫描

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值