代码之家  ›  专栏  ›  技术社区  ›  Gengetsu

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

  •  0
  • Gengetsu  · 技术社区  · 7 年前

    假设我们有这个语法

    start: 
    expressions;
    expressions:
               expressions expression 
               | expression 
               ;
    expression:
              expression NAME value { float $2 = $3;}
              | NAME value  { float $1 = $2;}
              ;
    value:
          INT '.' INT
          ;
    

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

    a 2.0 b 3.0

    这应该由我们的语法解释为这样(浮点a=2.0;浮点b=3.0;)

    我的目标是用一个名字声明一些变量,用构造函数做一些事情,比如我的类名(value);值是一个浮点值。

    问题是,我不知道如何在我的示例中获得类似语法块的值的整个值,以及如何声明变量名,该变量名将在输入文件中的每一行中更改,并且不会有一些通用浮点a=$1;

    我已经有了flex tokeniser,它将为我提供名称和值

    1 回复  |  直到 7 年前
        1
  •  0
  •   sepp2k    7 年前

    在C++中,不能用字符串代替变量名。您应该做的是定义从字符串到浮点的映射,然后执行以下操作 the_map[$2] = $3; 而不是 float $2 = $3; .

    在一个不相关的注释中,您需要将一个操作添加到 value 这使得它产生一个浮点值(或者让你的lexer为浮点生成一个令牌并使用它)。否则 $3 在中使用时没有适当的值 expression 的操作。