应用操作-使用re2c做词法分析

乐宝宝 2021-02-22 AM 1405℃ 0条

下载Re2c软件

[root@192 re2c]# wget https://github.com/skvadrik/re2c/releases/download/1.1.1/re2c-1.1.1.tar.gz

解压相关包

[root@192 re2c] tar -zxvf re2c-1.1.1.tar.gz

编译

[root@192 re2c]# cd re2c-1.1.1/
[root@192 re2c-1.1.1]#./configure
[root@192 re2c-1.1.1]# make && make install

新建一个程序integer.l

#include <stdio.h>

enum num_t { ERR, BIN, OCT, DEC, HEX };

static num_t lex(const char *YYCURSOR)
{
    const char *YYMARKER;
    /*!re2c
        re2c:define:YYCTYPE = char;
        re2c:yyfill:enable = 0;

        end = "\x00";
        bin = '0b' [01]+;
        oct = "0" [0-7]*;
        dec = [1-9][0-9]*;
        hex = '0x' [0-9a-fA-F]+;

        *       { return ERR; }
        bin end { return BIN; }
        oct end { return OCT; }
        dec end { return DEC; }
        hex end { return HEX; }
    */
}

int main(int argc, char **argv)
{
    for (int i = 1; i < argc; ++i) {
        switch (lex(argv[i])) {
            case ERR: printf("error\n"); break;
            case BIN: printf("binary\n"); break;
            case OCT: printf("octal\n"); break;
            case DEC: printf("decimal\n"); break;
            case HEX: printf("hexadecimal\n"); break;
        }
    }
    return 0;
}

变成执行程序

[root@192 test]# re2c integer.l -o integer.c
[root@192 test]# g++ integer.c -o integer

输入一个二进制来测试一下

[root@192 test]# ./integer 0b10
binary

输入一个十进制来测试一下

[root@192 test]# ./integer 1024
decimal

输入一个十六进制来测试一下

[root@192 test]# ./integer 0x100a
hexadecimal

输入一个八进制

[root@192 test]# ./integer 07
octal
标签: none

非特殊说明,本博所有文章均为博主原创。