加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

我所用到的yacc与lex命令

发布时间:2020-12-15 05:03:03 所属栏目:百科 来源:网络整理
导读:最近上操作系统实验课,用到了yacc和lex,Linux下使用bison和flex。下面是我用到的一些功能和命令,与大家分享。 在yacc或bison里定义的token如 %token xxx等,如果要在flex里用到,那么要用命令生成相应的头文件。 使用命令: yacc -d example.y 生成y.tab.

最近上操作系统实验课,用到了yacc和lex,Linux下使用bison和flex。下面是我用到的一些功能和命令,与大家分享。

在yacc或bison里定义的token如 %token xxx等,如果要在flex里用到,那么要用命令生成相应的头文件。

使用命令:

yacc -d example.y

生成y.tab.h,y.tab.c。

或者使用命令:

bison -d example.y
生成example.tab.h,example.tab.c。

头文件里有token的枚举定义给flex使用,所以要在flex源文件 example.l 中的第一部分包含这个头文件:

1 %{
2 #include "example.tab.h"
3 //其他
4 %}

或者

1 %{
2 #include "y.tab.h"
3 //其他
4 %}
使用命令:

flex example.l

  生成文件 lex.yy.c,这样词法分析器就在lex.yy.c里,语法分析器就在y.tab.c或者example.tab.c里了。
  然后,lex.yy.c,y.tab.c(或example.tab.c),y.tab.h(或example.tab.h)这三个文件与其他文件一起编译链接就可以了。

使用命令:

yacc -v example.y

  生成y.output,这个文件包含了LR分析表以及移进归约冲突。
使用命令:

bison -v example.y

生成example.output,这个文件包含了LR分析表以及移进归约冲突。


在需要用到语法分析的地方调用 yyparse() 函数即可。通常词法分析会从标准输入读取,(即yyin = stdin),但可以在调用yyparse()之前把输入改成一个指定的文件:yyin = file(file是FILE指针);

//其他代码
yyin = file;  //file是FILE指针
yyparse();
//其他代码

除了从标准输入和文件读取外,bison还可以从一个已有的字符串中读取进行分析,注意这个字符串要以''终止:

1 //其他代码
2 //string为以''终止的字符数组
3 yy_scan_string(string);
4 yyparse();
5 //其他代码

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读