lex学习笔记

    在lex文件的定义部分,可以包含c语句或者lex自身的定义部分。c语句可是放在%{与%}之间的部分,也可以放在外面的部分。区别在于,放在%{,%}之间的c语句,只要遵守c语法,可以随意放置;而在%{,%}之外的c语句则规定不能顶行。其次lex自身的定义部分一般不放置在%{,%}之间。

    Lex一些的内部变量和函数

    内部预定义变量:

    yytext   char *  当前匹配的字符串
    yyleng   int     当前匹配的字符串长度
    yyin     FILE *  lex当前的解析文件,默认为标准输出
    yyout    FILE *  lex解析后的输出文件,默认为标准输入
    yylineno int     当前的行数信息

    YY_CURRENT_BUFFER 当前的扫描缓冲区的状态

    内部预定义宏:

    ECHO     #define ECHO fwrite(yytext, yyleng, 1, yyout)  也是未匹配字符的
             默认动作

    内部定义的结构

    yy_buffer_state 记录缓冲区的状态       

    内部预定义的函数:

    int yylex(void)    调用Lex进行词法分析
    int yywrap(void)   在文件(或输入)的末尾调用。如果函数的返回值是1,就停止解
                       析。 因此它可以用来解析多个文件。代码可以写在第三段,这
                       样可以解析多个文件。 方法是使用 yyin 文件指针指向不同的
                       文件,直到所有的文件都被解析。最后,yywrap() 可以返回1
                       来表示解析的结束。

    YY_BUFFER_STATRE yy_scan_buffer()

    YY_BUFFER_STATRE yy_scan_string()

    YY_BUFFER_STATRE yy_scan_bytes()

    使用三个函数后要记得调用

    yy_delete_buffer()

    以免造出内存泄露

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值