进一步学习Flex语法 - 自带函数和规则的基本action

Posted bcbobo21cn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进一步学习Flex语法 - 自带函数和规则的基本action相关的知识,希望对你有一定的参考价值。

以前的Flex博文都有用到这两个函数,来学习一下,

    yylex():词法分析器驱动程序,用Lex翻译器生成的lex.yy.c内必然含有这个函数;

    yywrap():词法分析器遇到文件结尾时会调用yywrap()来决定下一步怎么做:
        若yywrap()返回0,则继续扫描;

        yywarp函数,这是一个约束函数,当它返回1时,代表扫描结束,此时结束程序;

    这是Flex内建函数;

看一张图,

转于, 

    https://blog.csdn.net/weixin_44007632/article/details/108666375

    flex在翻译为C文件时会产生一些自定义的函数和全局变量,就是上图;

    变量yytext,显然它就是被匹配的文本;初学来说这个比较重要;
 

然后我们看一下实现基本计算器的Flex代码,它有这句,

    [0-9]+ yylval=atoi(yytext);return NUMBER;

来逐步理解;先看yylval,

根据资料和手册,

    flex & bison 如何用yylval传递字符串值
    flex进行scanner,将数值存入yylval。

    而bison读取yylval之中的值。

atoi (表示 ascii to integer),是把字符串转换成整型数的一个C语言函数;

看一下规则中的基本action;一条规则,前面是匹配模式pattern,后面是action,匹配以后执行的动作;

    action 可以是任意 C 表达式;

    模式以第一个非转义的空白符结束;行里剩下的部分就是它的 action ;如果 action 是空的,那么模式被匹配时,输入的 token 只是简单的被扔掉;

    action可以为空,匹配以后啥也不干,可以是任意的C语言表达式;

前文,

    https://blog.csdn.net/bcbobo21cn/article/details/128811037

([1-9]+[0-9]*)|[0]    ECHO;

    匹配了整数时,action是ECHO;

    printf("KEY ");key++;    匹配了定义的关键字时,action使用了C函数printf,运行时输出了"KEY";

根据手册,有一些可以被包括在一个 action 中的特殊指令;最简单的是
    ECHO 拷贝 yytext 到扫描器输出;

    ECHO拷贝匹配的字符串进行输出;

下回继续;
 

以上是关于进一步学习Flex语法 - 自带函数和规则的基本action的主要内容,如果未能解决你的问题,请参考以下文章

Python100天学习笔记Day24 JS基本语法

《Python学习手册 第五版》 -第12章 if测试和语法规则

xPath基本语法规则-Java网络爬虫系统性学习与实战系列

xPath基本语法规则-Java网络爬虫系统性学习与实战系列

Python100天学习笔记Day24 JS基本语法

C语言的语法规则是啥?