我正在编写一种简单的类似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中没有声明参数(参见上面的注释)。
乍一看,人们可能会认为它可以被声明为变量而不是令牌,但这会导致意想不到的恐怖......
解决方案是什么?
答案 0 :(得分:2)
当你说"参数&#34 ;?时,你是什么意思?你的意思是"语义价值",如" CALLSUB令牌的语义价值"?
如果是,请声明CALLSUB
有一个类型(%token <iValue> CALLSUB
)并在bison
操作中使用该值,该值将为$1
。