词法元素(token)分析提取程序
词法元素(token)分析提取程序,支持原创
华中科技大学计算机科学与技术学院
《C语言程序设计》课程设计实验报告
题目: 词法元素(token)分析提取程序
专业: 信息安全 班级: 0901 组员: 陈学友 杨波
完成日期: 2010年 10 月 26 日
成绩: 指导教师: 李开
词法元素(token)分析提取程序,支持原创
目录
一、系统功能模块结构图
程序处理将在流程图中详细介绍。
二、数据结构设计及用法说明
数据说明和函数声明
typedef struct Token/*词法对象结构体*/
{
int x;/*在.lex中的行号*/
int y;/*在.lex中的编号*/
char String[255]; /*词法对象*/
int Row;/*在.c中的行号*/
int Line;/*在.c中的列号*/
int Times; /*出现次数*/
struct Token *Next;/*指向后一个节点的指针*/
struct Token *Back;/*指向前一个节点的指针*/
}Token;
/*载入函数,参数是记录目标链表的首地址和行数和载入路径*/
int load( char (*head)[81] ,int *LineNo,char *path);
/*判断是不是操作符*/
int IsOperator(char ch);
/*将二维字符数组转化成一维字符数组,返回首地址*/
char * GetComment(char (*head)[81],int n);
/*从head地址开始取出第一个分析对象string,可以是字符串,数字,操作符,x,y分别为首地址的行列数*/
char * GetToken(char *head,char *string,int *x,int *y);
词法元素(token)分析提取程序,支持原创
/*统计各字符出现的次数*/
int GetTimes(Token *head);
/*计算在.lex中行号和编号,输出.lex文件函数*/
void save( Token *head,char *path);
三、流程图
1.主函数流程
词法元素(token)分析提取程序,支持原创
2. 提取词法对象及其在.C里的坐标
词法元素(token)分析提取程序,支持原创
四、实验结果
测试数据为test.c,内容如下:
/*********test.c*************/
#include"stdio.h"
#define PI 3.14159265358
int main()
{
int i=0;
float radious,height;
puts("输入圆柱体的底面半径和高");
scanf("%f %f",&radious,&height);
printf("该圆柱体的体积为%f\n",(PI* radious * radious * height));
printf("这是测试文件\n");/*你不会看见这个注释*/
getchar();
return 0;
}
词法元素(token)分析提取程序,支持原创
输出文件设为test.lex.
10 6 ( 5 12 3表示.lex文件中的第10行,token编号是6,对应的token是左圆括号,它在.C文件中的第5行,第12列,为第3次出现。test.lex中的内容如下:
1 1 # 2 1 1 1 2 include 2 2 1 1 3 "stdio.h" 2 9 1 1 4 # 3 1 2 1 5 define 3 2 1 1 6 PI 3 9 1 1 7
3.14159265358 3 12 1 2 1 int 5 1 1 2 2 main 5 5 1 2 3 ( 5 9 1 2 4 ) 5 10 1 2 5 { 6 1 1 2 6 int 7 9 2 2 7 i 7 13 1 2 8 = 7 14 1 3 1 0 7 15 1 3 2 ; 7 16 1 3 3 float 8 9 1 3 4 radious 8 15 1 3 5 , 8 22 1 3 6 height 8 23 1 3 7 ; 8 29 2 4 1 puts 9 9 1 4 2 ( 9 13 2 4 3 "输入圆柱体的底面半径和高" 9 14 1 4 4 ) 9 40 2 4 5 ; 9 41 3 4 6 scanf 10 9 1 5 1 ( 10 14 3 5 2 "%f %f" 10 15 1 5 3 , 10 22 2 5 4 & 10 23 1 5 5 radious 10 24 2 5 6 , 10 31 3 5 7 & 10 32 2 6 1 height 10 33 2 6 2 ) 10 39 3 6 3 ; 10 40 4 6 4 printf 11 9 1 6 5 ( 11 15 4 6 6 "该圆柱体的体积为%f\n" 11 16 1 7 1 , 11 38 4 7 2 ( 11 39 5 7 3 PI 11 40 2 7 4 * 11 42 1 7 5 radious 11 44 3 7 6 * 11 52 2 7 7 radious 11 54 4 8 1 * 11 62 3 8 2 height 11 64 3 8 3 ) 11 70 4 8 4 ) 11 71 5 8 5 ; 11 72 5 8 6 printf 13 9 2 9 1 ( 13 15 6 9 2 "这是测试文件\n" 13 16 1 9 3 ) 13 32 6 9 4 ; 13 33 6 9 5 getchar 14 9 1 9 6 ( 14 16 7 9 7 ) 14 17 7 10 1 ; 14 18 7 10 2 return 15 9 1 10 3 0 15 16 2 10 4 ; 15 17 8 10 5 } 16 1 1
运行程序的截图如下:
词法元素(token)分析提取程序,支持原创
五、团队分工
预期:各自先单独写然后再整合。
实际完成:主要以我写的代码为蓝本,杨波提出了很多关键的意见,比如如何输出没有乱码的.lex文件,在关键的词法对象提取函数中找出了一些逻辑BUG并修改等。
六、实验体会
我和队友杨波在之前都是在忙着写各自的课设,这个拔高部分的代码其实是我们在写完各自的课设之后,十一的时候才正式开始写的,因为我们都这个程序的设计都没有思路,开始讨论了半天都没有达成很一致的理解,所以我们决定各自按照自己的思路来写,然后在取各自好的地方在重新组合改写。然后我准备在网上看一看有没有其他同学写的类似的代码可以借鉴,但是悲剧的是这些源代码很少,好不容易搜到了CSDN上有几份,不幸的是没有积分使得代码下不了,于是一气之下就决定自己来,找到一本《Lex和Yacc简明教程》浏览了一下,整本书大概40页,能看懂的也只有区区10行而已:
start: goto state0
state0: read c
if c = letter g
goto state0
state1: read c
词法元素(token)分析提取程序,支持原创
if c = letter goto s
if c = digit goto s
goto state2
state2: accept string
不过这几行代码给了我解决整个问题的灵感,于是最关键的提取词法对象函数写了出来。整个程序也慢慢逼近尾声。然而lex文件的输出却成了拦路虎,这一次,经过几天的思考,杨坡同学最终提出了解决方案,就是整个结构信息都转化成字符串再进行输出,这个方法不仅简单而且也很方便。在这个过程中,杨波同学还曾提出采用堆栈的方法来处理词法对象,但是由于对于堆栈的不熟悉,而且此时我已经把提取的函数写完了,本着时间用在刀刃上的精神,他的想法也就没有再去实现。到此,整个程序设计也就完成了。虽然我们的代码写完了,但是我们都觉得这个程序设计得还有很多不足,比如代码虽然实现了功能,但是却不竟如人意,感觉不够精练等等。还需要进一步改进。
回首整个编程的历程,我们发现编程不仅是脑力劳动,也是体力劳动,我们都付出了很多,但这些都是值得的,起码有一点不可否认,我们对C语言有熟悉了许多。
词法元素(token)分析提取程序,支持原创
程序代码清单:
/**************token.c**********************/
/*作者:陈学友 杨波*/
/*2010.10.20*/
/*******************************************/
#include"stdio.h"
#include"stdlib.h"
#include …… 此处隐藏:4689字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [政务民生]2013年公共基础知识热点问题(七)
- [政务民生]检验检测机构资质认定评审准则及释义20
- [政务民生]关于印发重庆市房屋建筑和市政基础设施
- [政务民生]1、隧道洞身开挖支护施工技术交底书
- [政务民生]2015年山东省17地市中考语文试题分类汇
- [政务民生]2-高级会计师资格考试和评审流程图
- [政务民生]2018版中国清分机行业发展分析及前景策
- [政务民生]新课改高中政治探究
- [政务民生]2018-2024年中国新型组合房屋行业投资
- [政务民生]2015年上海市春季高考数学模拟试卷五
- [政务民生]灌砂法及环刀法测压实度(带计算过程)
- [政务民生]运筹学实验2求解非线性规划
- [政务民生]劝学、逍遥游默写(教师卷)
- [政务民生]《运筹学》 - 期末考试 - 试卷A - 答案
- [政务民生]八年级英语下册 Module 6 Hobbies测试
- [政务民生]2019年宪法知识竞赛试题库100题(含答
- [政务民生]自动化英文文献翻译
- [政务民生]公文格式实施细则
- [政务民生]高一地理上册课堂跟踪练习题6
- [政务民生]会计继续教育习题及答案
- 第三章 无约束最优化方法
- 泛读教程第三册答案
- 魏晋南北朝文学
- 幂的运算复习题
- 城市环境问题的成因与治理策略_以社会
- 钢结构行业产业链及竞争分析研究
- 新型热塑性弹性体增韧聚丙烯的研究
- 中国旅游地理B卷试题及答案
- (苏教版)五年级数学上册第三单元测试卷
- 不稳定性心绞痛诊断与治疗
- 俞氏国际后勤职能部门绩效考核办法
- GB7258-2017新标准考试题含答案
- 小学生汉字听写比赛活动方案
- 1.3《平抛运动》学案 教科版必修2
- 2011香港特别行政区公务员考试复习资料
- 考虑水力条件变化的城市给水管网可靠性
- 表面活性剂在油田开发和生产中的应用
- ITT内部培训资料-FI端吸泵的介绍
- 文明守纪,从我做起学生发言稿
- 初中读《聊斋志异》心得体会800字范文




