C语言程序的词法分析,C语言词法分析小程序———焦童.doc

C语言词法分析小程序———焦童

沈阳航空航天大学

编 译 实 验 报 告

实验报告名称:C语言小子集的词法分析程序

院(系):计算机学院

专 业:计算机科学与技术

班 级学 号:2012040101064

姓 名:焦童

一.实验要求:

(1)功能:实现 C 语言小子集程序的词法分析。

(2)输入: c 语言小子集的程序片段。

(3)输出:单词序列。

二.单词的属性和表格

单词的属性主要分为五大部分:

1. 关键字,是由程序语言定义的具有固有意义的标示符。有时称为保留字或基

本字。如:int,float,double,char 等。

2. 标识符,用来表示各种名字,如变量名,数组名等。

3. 常量, 常量的类型一般有整型,实型,布尔型,文字型等等。

4. 运算符,如 +,-,*,/,%等。 5. 界符 ,如逗号,分号,括号等等。

表 1 C 语言小子集的定义表

种别码符号种别码符号种别码符号0无定义1主函数2无符号实数3普通标示符4关键字5界符6运算符7自增运算符8自减运算符9类型标识符10区域运算符总控流程图

Y

N

四.测试运行

先输入源代码文件地址

文件源代码如下

显示经过词法分析

源代码

#include

#include

#include

#include

char *Key[10]={"main","void","int","char","printf","scanf","else","if","return"};

char Word[20],ch;

int IsAlpha(char c) { //判断是否为字母

if(((c<='z')&&(c>='a'))||((c<='Z')&&(c>='A')))

return 1;

else

return 0;

}

int IsNum(char c){ //判断是否为数字

if(c>='0'&&c<='9') return 1;

else return 0; }

int IsKey(char *Word){ //识别关键字函数

int m,i;

for(i=0;i<9;i++){

if((m=strcmp(Word,Key[i]))==0)

{

if(i==0)

return 2;

return 1;

}

}

return 0;

}

void scanner(FILE *fp){ //扫描函数

char Word[20]={'\0'};

char ch;

int i,c;

ch=fgetc(fp); //获取字符,指针fp并自动指向下一个字符

if(IsAlpha(ch)){ //判断该字符是否是字母

Word[0]=ch;

ch=fgetc(fp);

i=1;

while(IsNum(ch)||IsAlpha(ch)){ //判断该字符是否是字母或数字

Word[i]=ch;

i++;

ch=fgetc(fp);

}

Word[i]='\0'; //'\0' 代表字符结束(空格)

fseek(fp,-1,1); //回退一个字符

c=IsKey(Word); //判断是否是关键字

if(c==0)

printf("%s\t <3 普通标识符>\n\n",Word);//不是关键字

else if(c==2)

printf("%s\t <1 主函数>\n\n",Word);

else

printf("%s\t <4 关键字>\n\n",Word);

}//输出关键字

else //开始判

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值