【发布时间】:2023-03-11 09:04:01
【问题描述】:
我正在编写一种简单的类似 Basic 的语言。出于某种原因,我想避免使用“call”关键字,所以我不使用“call 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 中没有声明任何参数(见上面的注释)。
乍一看可能认为它可以声明为变量而不是令牌,但它会导致意想不到的恐怖......
解决办法是什么?
【问题讨论】:
标签: bison flex-lexer