编译原理flex学习

本文介绍了如何在Linux环境下使用flex进行词法分析。通过创建1.l文件并进行编译,生成lex.yy.c及可执行文件,运行后能识别数字、#符号和其它字符。遇到数字输出,#则退出,其余字符原样输出。同时提到了yyleng变量用于获取输入字符串长度,Linux中EOF的发送方式是ctrl+d。
摘要由CSDN通过智能技术生成

编译工程1:词法分析 - 知乎 (zhihu.com)

按照上面的链接学习的

首先创建一个文件叫做1.l

ps.我是在linux系统下运行的,因为环境比较好装

%%
[0-9]+  printf("?");
#       return 0;
.       ECHO;
%%

int main(int argc, char* argv[]) {
    yylex();
    return 0;
}

int yywrap() {
    return 1;
}

然后使用

flex 1.l

来进行编译,会生成lex.yy.c文件,然后用gcc

gcc lex.yy.c -o 1

 

生成可执行文件,然后

./1

就可以运行了

可以看出来,这段代码就是遇到数字就输出?,遇到#就退出,其他情况原样输出。

%{
#define T_WORD 1
int numChars = 0, numWords = 0, numLines = 0;
%}

WORD            ([^ \t\n\r\a]+)

%%
\n              { numLines++; numChars++; }
{WORD}          { numWords++; numChars += yyleng; return T_WORD; }
<<EOF>>         { return 0; }
.               {
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值