我正在使用F#制作一个玩具编译器,即FsLex和FsYacc的组合。为了熟悉它们,我已经阅读了Expert F# (v2)书籍中的Lexer/Parser章节(顺便说一句,这是一本好书)。现在,我已经完成了备受推荐的ocamlyacc教程的一半,并卡在了最后一个例子Multi-Function Calculator mfcalc。特别是以下语句。%token <float->float> FNCT 在我的F#版本中,解析器文件一直出现“错误:解析错误”的错误。我有什么遗漏了吗?还是这是F#当前不支持的功能?
这似乎是一个bug。加括号也没有帮助。我尝试了各种解决方法,但没有找到干净的方法。你应该提交一个错误报告。如果您只有一个函数(就像教程示例中一样),您应该在预定义中定义一个类型:type floatFunction = float -> float ... %token <floatFunction> FNCT 如果您有许多功能,您也可以定义一个通用类型:type functionType<'a, 'b> = 'a -> 'b ... %token < ('a, 'b) functionType > FNCT 任何类型中的尖括号都会导致解析错误(即使是functionType<float,float>)。