📅  最后修改于: 2023-12-03 15:37:47.143000             🧑  作者: Mango
LEX 是一种用于生成词法分析器的工具,它可以帮助程序员自动生成词法分析器。
在这里,我们将介绍如何使用 LEX 编写一个能够接受以 'abb' 结尾的字符串的词法分析器。
%{
#include <stdio.h>
%}
%%
{a}*{b}{b} printf("String accepted!\n"); return 0;
%%
int main() {
yylex();
return 0;
}
在此代码片段中,首先我们需要包含头文件<stdio.h>
。
然后,我们进入 LEX 的主体部分,使用%%
分隔符将三个部分隔开。
在第一部分中,我们定义了 LEX 的配置信息。在这里,我们并没有定义任何配置信息,因此留空。
在第二部分中,我们定义了词法分析器的正则式。{a}*{b}{b}
表示以零个或多个'a'开头,后接两个'b'的字符串。当词法分析器读取到这样的字符串时,就会打印出"String accepted!",随后返回0。
在第三部分中,我们定义了主函数。在这里,我们调用了yylex()
函数,该函数是 LEX 自带的函数,用于启动词法分析器的扫描过程。然后,我们返回0。
将代码片段保存为文件abb.l
编译 LEX 程序
$ lex abb.l
编译链接生成可执行文件
$ cc lex.yy.c -o abb
运行程序
$ ./abb
此时,程序等待输入字符串。我们输入字符串aabbb
,按下回车键即可看到输出结果"String accepted!"。
aabbb
String accepted!
至此,我们已经成功地使用 LEX 编写了一个能够接受以 'abb' 结尾的字符串的词法分析器。