【问题标题】:command as parameter itself命令作为参数本身
【发布时间】: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


    【解决方案1】:

    你说的“参数”是什么意思?您是指“语义值”,如“CALLSUB 令牌的语义值”吗?

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

    【讨论】:

    • 就是这样!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 2013-07-15
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    相关资源
    最近更新 更多