我试图为逗号分隔值列表赋予语义值。事实上,我已经使用定义了 Bison 的归约规则
commasv : exp
| commasv "," exp
其中 exp
是一个数字、一个变量或一个函数指针,或者是一个逗号标记及其各自的语法和语义规则。 exp
的类型是 double,因此 commasv
的类型必须是 double。
问题是我想存储该列表以便使用它,例如在函数调用中。例如
h = create_object()
compute_list(h,1,cos(3.14159))
将给出某个compute_list
函数的预期结果。
作为基础 bison 文件,我使用了 bison manual 中的 mfcalc 示例。我用生成的另一个函数替换了 yylex 函数 using flex 。现在我可以做类似的事情
pi = 3.14159
sin(pi)
ln(exp(5))
使用带有 flex 的 yylex
函数的修改版本,但我想在函数调用、列表创建等中使用逗号分隔值。
感谢您的回答。
最佳答案
然后创建一个列表来存储结果。commasv
规则的结果不返回实际值,而是返回列表头。
一般来说,一旦你获得了稍微高级的语法(比如它合并了列表之类的东西),你就不能再真正使用值来表示解析,而是必须转向某种abstract syntax tree .
关于c - bison 的逗号分隔值的语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14666414/