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

时间:2011-04-08 01:47:01

标签: f# fsyacc

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

%token <float->float> FNCT
解析器文件中的

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

2 个答案:

答案 0 :(得分:4)

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

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

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

如果您有许多功能,您还可以定义通用类型:

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

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

答案 1 :(得分:0)

您可能需要放置parens,例如

%token <(float->float)> FNCT

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