3

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

%token <float->float> FNCT

在解析器文件中不断收到错误“错误:解析错误”在我的F# 版本中。我在这里遗漏了什么,或者这是 F# 目前不支持的功能吗?

4

2 回答 2

4

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

如果你只有一个函数(如教程示例中),你应该在前奏中定义一个类型:

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

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

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

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

于 2011-04-08T13:00:41.057 回答
0

您可能需要放置括号,例如

%token <(float->float)> FNCT

我忘记了(我离开 F# 机器去检查)。

于 2011-04-08T02:09:47.217 回答