如何用flex+bison写语法分析器

如何用flex+bison写语法分析器,第1张

flex (fast lexical analyser generator) 是 Lex 的另一个替代品。它经常和自由软信此携件 Bison语法分析器生成器 一起使用。Flex 最初由 Vern Paxson 于 1987 年用 C语言 写成。 Flex 手册里对 Flex 描述扒毕如下: “flex是一个生成扫描器的工具,能够识别文本中的词法模式。flex读入给定的输入文件,如果没有给定文件名的话,则从标准输入读取,从而获得一个关于需要生成的扫描器的描述。此描述叫做 规则,由正则表达式和 C代码对组成。flex 的输出是一个 C 代码滑伏文件——lex.yy.c——其中定义了 yylex() 函数。编译输出文件并且和 -lfl库链接生成一个可执行文件。当运行可执行文件的时候,它分析输入文件,为每一个正则表达式寻找匹配。当发现一个匹配时,它执行与此正则表达式相关的 C代码。” 一个相似的,用 C++语言 的词法分析器生成器是 flex++,包含在 flex 软件包里。 Flex 不是 GNU 工程,但是 GNU 为 Flex 写了手册。

在ubutu上安装 yacc的命令:

yylex()是由flex创建的扫描程序的入口点,调用yylex()启盯歼动或者重新开始扫描。Lex编写的yylex()从名为yyin的FILE *文件指针中读取字符。 如果未设老毕置yyin,则默认为标准输入。 它输出到yyout,如果未设置默认为stdout。 还可以在yywrap()函数中修改yyin,该函数在文件末尾调用。 它允许打开另一个文件,并继续解析。如果是这种情况,将其返回0。如果要结束此文件的解析,将其返回1。一般来说,每次调用yylex()都会返回一个表示标记类型的整数值。

flex的结构如下:

一个*.l的文件里的结构大概如上,用%%分隔开来。分为三个区:

使用诸如Flex的词法生凯含冲成器的好处是使得程序员可以集中考虑词法的特点;而不是具体如何实现词法分析。

参考: https://zhuanlan.zhihu.com/p/65490271


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12440807.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存