📌  相关文章
📜  在输入字母 {a,b} 上接受以 'abb' 结尾的字符串的 LEX 代码(1)

📅  最后修改于: 2023-12-03 15:37:47.143000             🧑  作者: Mango

在输入字母 {a,b} 上接受以 'abb' 结尾的字符串的 LEX 代码

LEX 是一种用于生成词法分析器的工具,它可以帮助程序员自动生成词法分析器。

在这里,我们将介绍如何使用 LEX 编写一个能够接受以 'abb' 结尾的字符串的词法分析器。

LEX 代码片段
%{
#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。

如何运行
  1. 将代码片段保存为文件abb.l

  2. 编译 LEX 程序

    $ lex abb.l
    
  3. 编译链接生成可执行文件

    $ cc lex.yy.c -o abb
    
  4. 运行程序

    $ ./abb
    

    此时,程序等待输入字符串。我们输入字符串aabbb,按下回车键即可看到输出结果"String accepted!"。

    aabbb
    String accepted!
    

至此,我们已经成功地使用 LEX 编写了一个能够接受以 'abb' 结尾的字符串的词法分析器。