教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 政务民生 >

词法元素(token)分析提取程序

来源:网络收集 时间:2026-09-02
导读: 词法元素(token)分析提取程序,支持原创 华中科技大学计算机科学与技术学院 《C语言程序设计》课程设计实验报告 题目: 词法元素(token)分析提取程序 专业: 信息安全 班级: 0901 组员: 陈学友 杨波 完成日期: 2010年 10 月 26 日 成绩: 指导教师: 李开

词法元素(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字,全部文档内容请下载后查看。喜欢就下载吧 ……

词法元素(token)分析提取程序.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/1442958.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)