sudo dnf instal flex bison

下面先开始测试flex
编辑test.l

%option noyywrap  //增加的语句
%{int chars = 0;
int words = 0;
int lines = 0;
%}
%%
[a-zA-Z]+       {words++; chars+= strlen(yytext);}
\n      {chars++; lines++;}
.       {chars++;}
%%
int main(int argc, char** argv){yylex();
printf("%d,%d,%d\n", lines, words, chars);
}

形成词法分析

$ ./a.out
hello
world
good
this book
4,5,28
(base) [myhaspl@localhost flexbison]$ flex test.l
(base) [myhaspl@localhost flexbison]$ gcc lex.yy.c
(base) [myhaspl@localhost flexbison]$ ./a.outhello
world
good
this book
4,5,28

$vim testcalc.l

%option noyywrap
%{enum yytokentype{NUMBER=258,ADD=259,SUB=260,MUL=261,DIV=262,ABS=263,EOL=264};
int yylval;
%}
%%
"+"     {return ADD;}
"-"     {return SUB;}
"*"     {return MUL;}
"/"     {return DIV;}
"|"     {return ABS;}
[0-9]+  {yylval = atoi(yytext); return NUMBER;}
\n      {return EOL;}
[ \t]   {return EOL;}
.       {printf("Mystery character %c\n", *yytext);}
%%
int main(int argc,char **argv)
{int tok;while(tok=yylex()){printf("%d",tok);if(tok==NUMBER) printf(" = %d\n",yylval);else printf("\n");}
}
$cc lex.yy.c
$ ./a.out
a /31 + |19
Mystery character a
264
262
258 = 31
264
259
264
263
258 = 19
264

编辑testcalc.y和testcalc.l文件

(base) [myhaspl@localhost flexbison]$ cat testcalc.l
%{#include"testcalc.tab.h"
%}
%option noyywrap
%%
"+"     {return ADD;}
"-"     {return SUB;}
"*"     {return MUL;}
"/"     {return DIV;}
"|"     {return ABS;}
[0-9]+  {yylval = atoi(yytext); return NUMBER;}
\n      {return EOL;}
[ \t]   {return EOL;}
.       {printf("Mystery character %c\n", *yytext);}
%%
(base) [myhaspl@localhost flexbison]$ cat testcalc.y
%{#include<stdio.h>
%}
%token NUMBER
%token ADD SUB MUL DIV ABS
%token EOL
%%calclist:| calclist exp EOL {printf("=%d\n", $2);};
exp: factor | exp ADD factor {$$ = $1 + $3;}| exp SUB factor {$$ = $1 - $3;};
factor: term | factor MUL factor {$$ = $1 * $3;}| factor DIV term {$$ = $1 / $3;};
term:NUMBER | ABS term {$$ = $2 >= 0? $2 : -$2;};
%%
main(int argc, int **argv){yyparse();
}
yyerror(char *s)
{fprintf(stderr, "error:%s\n", s);
}

生成可执行文件

(base) [myhaspl@localhost flexbison]$ bison -d testcalc.y
testcalc.y: 警告: 2 项偏移/归约冲突 [-Wconflicts-sr]
(base) [myhaspl@localhost flexbison]$ flex testcalc.l
(base) [myhaspl@localhost flexbison]$ cc -o testcalc testcalc.tab.c lex.yy.c
(base) [myhaspl@localhost flexbison]$ ./testcalc
2*3+4
=10
5+6*9
=59

编译与解释实践(1)-flex and bison 配置安装相关推荐

  1. python3精要(62)-编译与解释实践(1)

    欢迎来到PLY主页. PLY是python的lex和yacc解析工具的实现. 简而言之,PLY只是简单的lex / yacc实现.以下是其基本功能列表: 它完全用Python实现. 它使用LR解析,这 ...

  2. 在windows下安装flex和bison、GCC

    学习Stellar-core 需要依赖项flex .bison .gcc三个依赖项 下载得网址: 链接: https://pan.baidu.com/s/1mitCLcs 密码: 3jaj   通过 ...

  3. Linux:编译flex、bison总结

    编译flex.bison总结 step1.安装bison step2.安装flex 第一种方式: 第二种方式: END 这个做了很久了,一直没总结,今天以Ubuntu18.04为例,总结一下步骤,没有 ...

  4. 手把手教程-lex与yacc/flex与bison入门(一)(使用windows环境)

    前言 1.文章诞生的契机 在计算机学习中,我们有时可能会想到自制一门属于自己的编程语言,此时选择lex与yacc来生成词法分析器与语法分析器是非常不错的选择.然而,这两个工具虽然用起来简单,但对于新手 ...

  5. 国内外编译原理课程实践教学现状分析

    <自己动手写编译器.链接器> 冯向萍 (新疆农业大学计算机与信息工程学院)   摘 要:本文主要从教材的选择,实践项目的设置以及实践课程占总评成绩的比例等方面分析和比较了国内外多所高校编译 ...

  6. lex(flex)yacc(bison)

    初始配置 文法分析用Flex(Lex):将数据分隔成一个个的标记token (标示符identifiers,关键字keywords,数字numbers, 中括号brackets, 大括号braces, ...

  7. 编译器(汇编器)开发工具Flex和Bison的使用方法之Flex

    点击打开链接 编译器和汇编器在工作过程中,往往完成如下的任务: (1) 读取源代码并且获得程序的结构描述: (2) 分析程序结构,并且生成相应的目标代码. Flex和Bison就是为可以帮助完成以上任 ...

  8. flex和bison实例分析

    最近在学习编译原理,利用flex和bison编写一个基于文本识别的简单计算器程序,参考<flex于bison>中内容,对程序进行一些简单的修改,加入Makefile.该计算器程序主要实现识 ...

  9. ubuntu下安装flex和bison

    做编译原理作业时需要用到flex和bison,于是在Linux下安装了flex和bison apt install flex bison 新建一个文件,名为test.l %% [0-9]+ print ...

最新文章

  1. 100c之36:不同鸡的数量
  2. pip install 另一个程序正在使用此文件,进程无法访问
  3. 如何有效建设网站外链?
  4. UEFI+GPT安装windows
  5. Python实现全民K歌歌曲下载
  6. objectdatasouce的温故
  7. 工厂模式之消除switch/case语句
  8. 一个简单的Android客户端从服务器端获取json数据并解析的实现代码
  9. cout 数组_C++数组|快速排序、二分法查找及其时间复杂度
  10. 更改appstore开发商名字
  11. bingo卡片js代码_Excel Bingo卡随机数代码
  12. JS 考试倒计时
  13. 2020年鼠年正月十二 淡然面对
  14. Java学习笔记 (二十七) 使用NIO写文件
  15. 哪五种人不适合学编程?
  16. papers with code介绍(人工智能方向研究生的必备网站)
  17. ccs C语言编译器,CCS C 编译器手册2010.pdf
  18. 10个用Java谋生非常有趣的方式
  19. FPGA 之 SOPC 系列(二)SOPC开发流程及开发平台简介
  20. 第一章:1-03、试从多个方面比较电路交换、报文交换和分组交换的主要优缺点。...

热门文章

  1. async异步注解和aspect切面注解等注解的原理
  2. Web 第二阶段Java Script (续)
  3. css07家用电器分类
  4. 练习一:GitHub Desktop下载及使用
  5. C语言与sqlserver数据库
  6. Java集合框架之ArrayList类
  7. 洛谷 P3865 【模板】ST表
  8. 【freemarker】渲染列表一系列操作
  9. Winserver-Exception from HRESULT: 0x800A03EC
  10. jQuery:localStorage用法