教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 范文大全 > 资料大全 >

C语言词法分析器

来源:网络收集 时间:2026-09-15
导读: C语言词法分析器 一,实验目的 1.加强对词法分析原理、方法和基本实现技术的理解; 2.灵活运用这学期所学的知识对词法分析,语法分析有进一步的理解; 3.强化对系统软件综合工程实现能力的训练; 二.实验内容 用C语言(或 C++ )作为宿主语言完成: C语言(w

C语言词法分析器

一,实验目的

1.加强对词法分析原理、方法和基本实现技术的理解;

2.灵活运用这学期所学的知识对词法分析,语法分析有进一步的理解; 3.强化对系统软件综合工程实现能力的训练;

二.实验内容

用C语言(或 C++ )作为宿主语言完成:

C语言(win-TC , ANSI C或turbo C 2.0)词法分析器的设计和实现。

三.实验要求

1. 编写C语言词法分析器的源程序并调试通过; 2. 通过测试程序的验收;

3. 提交简明扼要的书面实验报告,内容包括:属性字设计;源程序主要流程;主要数据结构设计,程序。

四,程序流程图

(1) main

(2)

判断并标志为 运算符或标点 符号 初始化数组,标志符

判断并标志是 否为关键字

判断并标志为 其它类型

Return 返回 sign 数值

五,原程序代码 #include<stdio.h> #include<string.h>

int i,j,k,sign,number,flag,run,sum,autuor;

/*flag which is use to judge the string is keywords or not!*/ char ch;

char words[10] = {" "}; char program[500];

int Scan(char program[]) { char * keywords[39] =

{ "auto","default","do", "extern","goto", "int","short","static","struct","switch", "typedef","void","break","case","char", "const","continue","double","else", "enum", "float","for","if","long", "register",

"return","signed","zhouhong","sizeof","union", "unsigned","volatile","while","main","printf", "scanf","include","define","string" };

number = 0; flag = 0; j = 0;

ch = program[i++];

/* To handle the lettle space ands tab*/

while ((ch == ' ') || (ch == '\t') || (ch == '\r')||(ch=='\n')) ch=program[i++]; /* 跳过不理睬 */

/*handle letters*/

if ((ch >= 'a') && (ch <= 'z' )) {

while ((ch >= 'a') && (ch <= 'z' )) {

words[j++]=ch; ch=program[i++]; } i--;

words[j++] = '\0'; for (k = 0; k < 39; k++)

if (strcmp (words,keywords[k]) == 0) {sign=k+1;flag=1; if(k==27) autuor=1; break; }

if (flag == 0)

{ sign = 100; /*为关键字*/ }

}/* if 是关键字*/ /*handle digits*/

else if ((ch >= '0') && (ch <= '9')) { number = 0;

while ((ch >= '0' ) && (ch <= '9' )) { number = number*10+(ch-'0'); ch = program[i++]; }

sign = 200; /*为数字*/ i--; }

/*opereation and edge handle*/ else switch (ch) {

case '=':{

if (ch == '=')

words[j++] = ch; words[j] = '\0';

ch = program[i++]; if (ch == '=')

{words[j++] = ch; words[j] = '\0';

sign= 401; /* = = */

} else

{ i--; /*退回一个字符*/

sign = 402; /* = */ } break; }

case'>':{ if (ch == '>')

words[j++] = ch; words[j] = '\0';

ch = program[i++]; if (ch == '=')

{words[j++] = ch; words[j] = '\0';

sign = 403; /* >= */

}

else if(ch=='>') { words[j++] =ch; words[j] ='\0';

sign =419; /* >> */

} else { i--;

sign = 404; /* >

*/

} break; }

case'<': {if (ch == '<')

words[j++] = ch;

words[j] = '\0'; ch = program[i++]; if (ch == '=')

{ words[j++] = ch; words[j] = '\0';

sign = 405; }

else if(ch=='<') { words[j++] = ch; words[j] = '\0';

sign = 420; } else { i--;

sign = 406; }break; } case'!':

{if (ch == '!')

words[j++] = ch; words[j] = '\0'; ch = program[i++]; if (ch == '=')

{words[j++] = ch; words[j] = '\0';

sign= 407; } else {i--;

sign= 408; } break; } case'+':{

if (ch == '+')

words[j++] = ch;

words[j] = '\0'; ch = program[i++]; if (ch == '=')

{ words[j++] = ch; words[j] = '\0';

sign= 409; }

else if (ch == '+') { words[j++] = ch; words[j] = '\0';

sign= 410; } else {i--;

sign = 411; }

break; }

case'-': {if (ch == '-')

words[j++] = ch; words[j] = '\0'; ch = program[i++];

if (ch == '=') { words[j++] = ch; words[j] = '\0';

sign= 412; }

else if( ch == '-') { words[j++] = ch; words[j] = '\0';

sign= 413; }

/* 负数的情况 */

else if((ch >= '0') && (ch <= '9')) {while( (ch >= '0') && (ch <= '9') ) {words[j++] = ch; ch = program[i++]; }

words[j] = '\0';

sign = 1000; /* 标志为1000 */ /* 负数 */ i--; break; } else { i--;…… 此处隐藏:4141字,全部文档内容请下载后查看。喜欢就下载吧 ……

C语言词法分析器.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/fanwen/1816354.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)