编译原理词法分析器

编译原理词法分析器

ID:18485242

大小:312.50 KB

页数:23页

时间:2018-09-18

编译原理词法分析器_第1页
编译原理词法分析器_第2页
编译原理词法分析器_第3页
编译原理词法分析器_第4页
编译原理词法分析器_第5页
资源描述:

《编译原理词法分析器》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、手工设计C语言的词法分析器1.课程设计任务1.1课程设计题目手工设计C语言的词法分析器(可以是C语言的子集)1.2设计要求处理c语言源程序,过滤掉无用符号,判断源程序中单词的合法性,并分解出正确的单词,以二元组形式存放在文件中。1.3设计目的了解高级语言单词的分类,了解状态图以及如何表示并识别单词规则,掌握状态图到识别程序的编程。2.设计总体方案词法分析是编译的基础,需要对程序中的单词进行划分,并生成token文件(主要存符号表的入口地址,以便获取进一步需要的信息),供语法分析阶段使用。同时要生成符号表,包括变量的和常量的,在之后的分析中会不断的查填符号表,将单词的类型

2、,值等各项信息填完整,才能进行运算等操作。采用了较为底层的C语言。1、C语言严格区分字符和字符串,%c和%s不要混用,否则造成异常。Java中经常使用String或StringBuilder,淡化了字符的概念,在C中需要注意。2、自定义的头文件要用双引号而不是尖括号。3、''光标移到下一行,在打印源程序时,头文件打印空行,看上去像多打印了一个'',其实没错。4、字符串操作不能直接赋值额,需要搞清楚char型数组和char*的不同。Strcpy是将内容进行拷贝,char型数组用Strcpy。而可以char*=字符串常量,字符串常量表示的是一个地址,可以让char型

3、的指针直接指向该地址,避免空间浪费。235、在不同的处理函数中,要生成token,并赋值,然后让token的指针的数组指向该位置。但由于函数内的token变量是局部变量,跳出函数则失效,故指针指向的位置的内容将有可能改变,导致在该函数之外往文件中写token数组时乱码。6、fgets最后读到行末尾,'添加,判断时'不是''7、开辟的数组空间太小导致越界,也会导致乱码。8、最费脑子的错误就是自己设计的headCh,作为每次识别的第一个字符。因为读文件的时候,文件指针会一直的向后移动,当时为了避免文件指针往回移动的时间开销,就用一个char类型的headCh来保存第

4、一个字符。但是预处理的函数中,需要根据下一个字符判断是否结束预处理,故由headCh保存下一个字符,再读到buffer中时,buffer的第一个字符为下一行的第二个字符,即headCh+buffer的内容才是完整的一行的内容。所以为了不改变程序的处理过程,还要保持headCh始终在buffer[start]之前的一位,而处理程序是根据headCh的值来判断调用哪个处理函数的,故每次处理结束后需要给headCh和start重新赋值。程序流程图:23Token:23错误处理:3.代码main.c1.

5、Hei';font-size:18px;">#include "global.h"  2.#include   3.int main()  4.{  5.    char fname[FSIZE];  6.  7.    error = fopen("error.txt", "w+");  8.    if(error==NULL)  9.    {  10.        printf("cannot create error.txt!");  11.    }  231.    out = fopen("out.txt", "w+");  2.

6、    if(out==NULL)  3.    {  4.        printf("cannot create out.txt!");  5.    }  6.    printf("please input filename: ");  7.    scanf("%s", fname);  8.    in = fopen(fname, "r");  9.    if(in==NULL)  10.    {  11.        printf("error: cannot open file %s", fname);  12.        re

7、turn -1;  13.    }  14.    headCh = predeal(in);  15.  16.    while(fgets(buf, BSIZE, in)!=NULL)  17.    {  18.        head = headCh;  19.        int len = strlen(buf);  20.        buf[len-1] = '';  21.      //  printf("buf:$%s$tline:%d", buf, line);  22.        star

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。