f# - 以下 ocamlyacc 代码的 fsyacc 等价物是什么?

标签 f# fsyacc

我正在使用 F# 开发玩具编译器,即 FsLex 和 FsYacc 的组合。为了熟悉它们,我阅读了 Expert F# (v2) 一书(一本好书)的 Lexer/Parser 章节。现在,我已经完成了推荐的 ocamlyacc 教程的一半,并停留在最后一个示例多功能计算器 mfcalc .特别是,以下声明

%token <float->float> FNCT

在我的 F# version 中,解析器文件不断出现错误“错误:解析错误” .我是否遗漏了这里的任何内容,或者这是 F# 目前不支持的功能?

最佳答案

这看起来像一个错误。添加括号没有帮助。我尝试了各种解决方法,但找不到干净的方法。你应该做一个错误报告。

如果你只有一个函数(就像在教程的例子中那样),你应该在序言中定义一个类型:

type floatFunction = float -> float
...
%token <floatFunction> FNCT

如果你有很多函数,你也可以定义一个泛型类型:

type functionType<'a, 'b> = 'a -> 'b
...
%token < ('a, 'b) functionType > FNCT

类型中的任何尖括号都会导致解析错误(甚至是 functionType<float,float> )。

关于f# - 以下 ocamlyacc 代码的 fsyacc 等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5589574/

相关文章:

f# - 如何在 F# 中使我的队列线程安全(并发)

.net - DotNumerics、AlgLib、dnAnalytics、Math.net、F# for Numerics、Mtxvec?

F# - 在 F# 交互窗口中显示完整结果

F# 给函数参数与不给函数有什么区别

f# - FSYacc 线程生成的解析器是否安全?

F# fslex fsyacc 成熟的生产代码?

.net - F# 允许在受歧视的联盟中相互引用案例吗?

msbuild - 在 Vs2013 中使用 FsLex/Yacc

f# - fsyacc/fslex 或 FParsec 选择什么?