如何从 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
的操作中使用
时,它没有正确的值。
假设我们有这个语法
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
的操作中使用 时,它没有正确的值。