1
我想你写一些简单的编译器,检测未声明的变量,并做一些额外的东西。问题是,我不能在我的野牛文件中使用“$$”,它说“$$'$$'没有声明类型”。这里是我的flex和野牛文件的相关部分:从flex返回属性到野牛
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
;
%%
写作$ 1.型号野牛文件的工作,但$$类型不起作用。 任何人都可以帮忙吗?谢谢
是的,这工作。谢谢! – yrazlik 2013-04-10 15:58:25
flex/bison是有趣且功能强大的小工具,但首先要弄清楚它们可能非常棘手。如果你还有其他问题,肯定会发布。出于好奇,这个项目的背景是什么? – Josh 2013-04-10 16:01:20
谢谢,实际上ii还有一个问题。关于你的问题,项目的背景是,我们为基本的数学操作编写了扫描仪和语义分析器。我们在上一步中做了句法问题,现在我们必须检测语义错误。 1)未声明的变量2)矩阵或向量与整数,实数等比较。我的另一个问题是,我可以做这样的事情:%token tIDENT,但我不能做以下几点: %类型变量。我的意思是,如果它是一个令牌,那么我可以将它与2个属性相关联,但是如果它是我不能的类型。 –
yrazlik
2013-04-10 17:25:36