Bison-Flex学习笔记
主要看的《flex与bison中文版》,书上已有基本用法此处暂时不再详细介绍。将来有时间我再写一下。此处只写一些书上没有的(或者我可能眼瞎没看见的)
木凡辰
这个作者很懒,什么都没留下…
展开
-
Bison之destructor
前两天看到了这个用法。感觉这个关键词感觉还是挺误导人的。因为我一开始以为,在每次销毁token的时候都会调用这个destructor。因为我的token有的会带有指针类型的值,但却并不是所有匹配规则都会用到这个指针指向的值。所以我以为只要设置了destructor,在每次匹配成功一个规则的时候,就不用手动去释放没有用到的token了。结果并!没!有!原来,这个destructor,只有在发生...原创 2019-11-01 10:43:10 · 514 阅读 · 0 评论 -
yyless与yymore
这两个函数可以轻松地帮我们将词法分析器改为LALR(n)的词法分析器。yymore()yymore函数是指,将下次分析的结果词汇,接在当前yytext的后面,而不是替换已有内容。(当前已有内容并不会影响下次分析)比如如下代码:%x xdquote\" { BEGIN(xdquote); }<xdquote>[^"]+ { yymore(); }<xdquote&...原创 2019-10-29 18:10:12 · 2010 阅读 · 1 评论 -
Bison 操作符前可以为空导致的归约/归约冲突
今天遇见一个很奇怪的归约/归约冲突:expr: NUM | expr opt '=' expr ;opt: '+' | '-' | /* empty */ ;大概类似这样,一直在报归约/归约冲突,我就懵了,哪里冲突了???直到我仔细研读了一波output文件才弄明白:当栈里已经有expr opt '=' expr的时候,本来应该按照左...原创 2019-10-21 18:13:00 · 1291 阅读 · 0 评论 -
Bison(yacc)如何正常退出以及返回值
之前说过如何将Bison的输入源改为指定字符串。然而当我将输入源改为指定字符串之后,发现遇到了一个很奇怪的问题:yyparse无论如何都会调用yyerror进行报错。本来我准备在yyerror里进行内存的释放,这样一来,无论分析成功与否,内存都会被释放,导致分析的结果都没了。比如如下的bison代码:calc: expr '=' { calculate($1); } ;exp...原创 2019-10-18 18:38:11 · 2056 阅读 · 0 评论 -
Bison%code的使用
最近遇到一个很恼人的问题:我在Bison的YYSTYPE的定义中使用了unordered_map*,并在开头的%{ … %}段中include了unordered_map头文件。然而当我使用–defines选项生成bison头文件时,却发现:嗯?不识别unordered_map??怎么肥四?我明明引用了头文件啊!namespace也用了啊!打开生成的头文件一看:嗯??我引用的头文件呢???...原创 2019-10-15 17:48:33 · 997 阅读 · 0 评论 -
更改Bison-Flex的输入源
在我最开始使用Bison-flex时,出于某些原因,涉及到题目这个问题。在此来说明一下该如何操作。如有错漏,还望指摘。原创 2019-10-15 16:58:14 · 1403 阅读 · 1 评论