0

我正在尝试为逗号分隔值列表赋予语义值。事实上,我已经定义了野牛使用的减少规则

commasv : exp
        | commasv "," exp

其中exp它是一个数字或一个变量或一个函数指针,或者还有一个带有其各自语法和语义规则的逗号标记。的类型exp是双精度的,所以类型commasv必须是双精度的。

问题是我想存储列表以便使用它,例如,在函数调用中。例如

h = create_object()
compute_list(h,1,cos(3.14159))

将给出某个compute_list函数的预期结果。

作为基础野牛文件,我使用了bison 手册中的 mfcalc 示例,并将该函数替换为使用 flexyylex生成的其他函数。现在我可以做类似的事情

pi = 3.14159
sin(pi)
ln(exp(5))

使用带有 flex的函数的修改版本,yylex但我想在函数调用、列表创建等中使用逗号分隔的值。

感谢您的回答。

4

1 回答 1

1

然后创建一个列表来存储结果。与其让commasv规则的结果返回一个实际值,不如让它返回列表头。

一般来说,一旦你获得了某种中等高级的语法(比如它结合了列表之类的东西),你就不能再真正使用值来表示解析,而必须转向某种抽象语法树

于 2013-02-02T21:00:08.697 回答