如何从 Bison 的语法中启动变量?

How to initiate a variable from the Grammar in Bison?

假设我们有这个语法

start: 
expressions;
expressions:
           expressions expression 
           | expression 
           ;
expression:
          expression NAME value { float  = ;}
          | NAME value  { float  = ;}
          ;
value:
      INT '.' INT
      ;

对于这个语法,我们应用这个输入

一个 2.0 b 3.0

我们的语法应该这样解释 (float a = 2.0 ; float b = 3.0; )

我的目标实际上是用名称声明一些变量,并用构造函数做一些事情,比如 myClass NAME(value);值是一个浮点数。

问题是我不知道如何在我的示例中获取像值这样的语法块的全部值,以及如何声明变量名,该变量名将在输入文件的每一行中更改并且不会有一些通用的 float a = $1;

我的 flex tokeniser 已经开始工作,它将给我 NAME 和 VALUE

在 C++ 中不能使用字符串代替变量名。您应该做的是定义一个从字符串到浮点数的映射,然后执行类似 the_map[] = ; 而不是 float = ;.

的操作

关于一个不相关的说明,您需要向 value 添加一个操作,使其生成一个浮点值(或者让您的词法分析器为浮点数生成单个标记并使用它)。否则,当您在 expression 的操作中使用 时,它没有正确的值。