命令作为参数本身

时间:2014-06-11 19:03:09

标签: bison flex-lexer

我正在编写一种简单的类似Basic的语言。出于某种原因,我想避免“打电话”。关键字所以不要调用子程序,而是调用my_subroutine'我只使用' my_subroutine'。 E.g: a=8:do_something:b=c+d

我有一个很好的工作方法来声明子程序。 Flex也可以,它会在用户字符串中出现声明的子例程时识别。但是我在Bison宣言中遇到了困难。我这样做:

%token CALLSUB ... ... ... stmt: ... CALLSUB { $$ = opr(CALLSUB, 2, NULL, NULL); } //note: to be referred later ...

My Flex识别任何子程序并返回

yylval.iValue = ... //the proper address return CALLSUB;

到目前为止似乎没问题,但没有返回任何参数,因为Bison中没有声明参数(参见上面的注释)。

乍一看,人们可能会认为它可以被声明为变量而不是令牌,但这会导致意想不到的恐怖......

解决方案是什么?

1 个答案:

答案 0 :(得分:2)

当你说"参数&#34 ;?时,你是什么意思?你的意思是"语义价值",如" CALLSUB令牌的语义价值"?

如果是,请声明CALLSUB有一个类型(%token <iValue> CALLSUB)并在bison操作中使用该值,该值将为$1