compiler-construction - 将属性从 flex 返回给 bison

标签 compiler-construction bison context-free-grammar flex-lexer

我正在尝试编写某种简单的编译器来检测未声明的变量,并执行一些额外的操作。问题是,我不能在我的 Bison 文件中使用“$$”,它说“‘type'的$$没有声明类型”。以下是我的 flex 和 bison 文件的相关部分:

flx file:

int[ \t\n]+matrix {yylval.type_id.Type = 4;return tINTMATRIXTYPE; }

bison file:

%}

%union semrec
{
struct
{
  int Type;
  char *id;
 }type_id;
}

%start prog



%%
prog: stmtlst
;

stmtlst : stmt
    | stmt stmtlst
;

tmt : decl //baktım
     | asgn
     | if
;

decl : type vars '=' expr ';' 
;

type : tINTTYPE     
     | tINTVECTORTYPE    
     | tINTMATRIXTYPE   {$$.Type=$1.Type;}
     | tREALTYPE         
     | tREALVECTORTYPE    
     | tREALMATRIXTYPE    
;




%%

在 bison 文件中写入 $1.Type 可以,但 $$.Type 不起作用。 有人可以帮忙吗?谢谢

最佳答案

您需要明确告诉 bison 您计划为其分配值的每个标记是什么类型(终端和非终端)。看起来您也没有声明任何 token 。

%type <Type> type 

将帮助您开始。但现在您必须确保 $$ 也为所有其他类型(tINTTYPE 等)设置。

下面是一个简单的示例,可以让您大致了解 bison 的运行方式:http://www.gnu.org/software/bison/manual/bison.html

关于compiler-construction - 将属性从 flex 返回给 bison,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15930257/

相关文章:

parsing - Shift-reduce:什么时候停止减少?

regex - 非正则上下文无关语言和无限正则子语言

java - 绘制控制流图

c - 如何释放 Bison 的内存?

c - 在 bison/yacc 语义操作中构建异构数据类型数组(或集合)的最佳方法

bison - 安装Bison后"make: yacc: Command not found"

regex - 描述正则表达式的语言本身是正则的吗?

c++ - 更新 ubuntu 10.4 后无法将 errno.h 与 gcc/g++ 一起使用

compiler-construction - 理解结构等价

c - 如何为每个 posix 操作系统编译 GnuTLS