进一步学习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的主要内容,如果未能解决你的问题,请参考以下文章
《Python学习手册 第五版》 -第12章 if测试和语法规则
xPath基本语法规则-Java网络爬虫系统性学习与实战系列