首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C++写的一个简略的词法分析器(分析C语言)

2012-11-03 
C++写的一个简单的词法分析器(分析C语言)实验用:几点注意:1.代码又长又臭,时间关系,没有优化,冗余项多(我

C++写的一个简单的词法分析器(分析C语言)

实验用:

几点注意:

1.代码又长又臭,时间关系,没有优化,冗余项多(我都看不下去了。囧)

2.加了一下简单的错误检测。(在mapping.h中定义了错误类型,可以查阅)

3.使用头文件宏定义来表示单词的各种属性,也可以用文件

4.对于标志符的入口地址,无非是为了唯一识别,只要名字相同,都作为一个,使用自增的Int来模拟入口地址,即唯一标识。不考虑变量类型。

5.最后输出有三个表:Token表,错误表,标志符表。

6.一个字符一个字符的读文件,其实可以每次读到一个固定长度的缓冲区,双缓冲区进行分析。也可以读每一行。

代码:

mapping.h:

请输入要进行语法分析的C语言程序:test.c************************************分析表******************************                          内容      描述        种别码  地址    行号                     <stdio.h>    头文件        130             1                        "my.h"    头文件        130             2                        max 90      常量        55              3                           int    关键字        17              6                          char    关键字        4               6                          main    标志符        40      1       6                             (    限界符        100             6                             )    限界符        101             6                             {    限界符        104             7                          8888      常量        51              8                          char    关键字        4               8                            yn    标志符        40      2       8                             ;    限界符        110             8                            do    关键字        8               9                             {    限界符        104             10                           int    关键字        17              11                          9801      常量        51              11                             ;    限界符        110             11                         float    关键字        13              12                             ;    限界符        110             12                        double    关键字        9               13                             f    标志符        40      3       13                             ;    限界符        110             13                         float    关键字        13              14                        -9.876      常量        53              14                             ;    限界符        110             14                        double    关键字        9               15                         hello    标志符        40      4       15                             .    限界符        106             15                           8.9      常量        53              15                             ;    限界符        110             15                         float    关键字        13              16                        7.9e-5      常量        53              16                             ;    限界符        110             16                           int    关键字        17              17                             e    标志符        40      5       17                            -5      常量        51              17                             ;    限界符        110             17                             a    标志符        40      6       18                            /=    运算符        87              18                             6      常量        51              18                             ;    限界符        110             18                          init    标志符        40      7       19                             (    限界符        100             19                             )    限界符        101             19                             ;    限界符        110             19                            无      注释        120             19                       scanner    标志符        40      8       20                             (    限界符        100             20                             )    限界符        101             20                             ;    限界符        110             20                            无      注释        121             21                        printf    标志符        40      9       21                             (    限界符        100             21                             "    限界符        112             21       Are You continue(y/n)\n      常量        54              21                             "    限界符        112             21                             )    限界符        101             21                             ;    限界符        110             21                            yn    标志符        40      2       22                             =    运算符        72              22                         getch    标志符        40      10      22                             (    限界符        100             22                             )    限界符        101             22                             ;    限界符        110             22                            if    关键字        16              23                             (    限界符        100             23                             a    标志符        40      6       23                            ==    运算符        80              23                             7      常量        51              23                             )    限界符        101             23                             {    限界符        104             24                             }    限界符        105             26                          else    关键字        10              27                             {    限界符        104             28                             }    限界符        105             30                             }    限界符        105             33                         while    关键字        32              34                             (    限界符        100             34                            yn    标志符        40      2       34                            ==    运算符        80              34                             '    限界符        111             34                             y      常量        52              34                             '    限界符        111             34                            ||    运算符        83              34                            yn    标志符        40      2       34                            ==    运算符        80              34                             '    限界符        111             34                             Y      常量        52              34                             '    限界符        111             34                             )    限界符        101             34                             ;    限界符        110             34                        return    关键字        20              36                             0      常量        51              36                             ;    限界符        110             36                             [    限界符        102             37                         hello    标志符        40      4       37                            无      注释        121             43                            无      注释        121             45                            无      注释        121             46                        printf    标志符        40      9       47                             (    限界符        100             47                             "    限界符        112             47                         hello      常量        54              47                             "    限界符        112             47                             )    限界符        101             47                             ;    限界符        110             47************************************错误表******************************      内容                          描述        类型    行号  #de some                    预处理错误        13      4        9.                 float表示错误        1       12       9.e                double表示错误        2       13         @                      非法字符        6       31        无                注释没有结束符        3       49        无                 '['没有对应项        9       37        无                 '{'没有对应项        11      7************************************标志符表******************************                          内容      描述        种别码  地址    行号                          main    标志符        40      1       6                            yn    标志符        40      2       8                             f    标志符        40      3       13                         hello    标志符        40      4       15                             e    标志符        40      5       17                             a    标志符        40      6       18                          init    标志符        40      7       19                       scanner    标志符        40      8       20                        printf    标志符        40      9       21                            yn    标志符        40      2       22                         getch    标志符        40      10      22                             a    标志符        40      6       23                            yn    标志符        40      2       34                            yn    标志符        40      2       34                         hello    标志符        40      4       37                        printf    标志符        40      9       47Process returned 0 (0x0)   execution time : 5.629 sPress any key to continue.


热点排行