0

我一直在使用 fslex 和 fsyacc,并且 F# 源文件(.fs它们从 lexer ( .fsl) 和 parser ( .fsp) 规则生成)在所有地方都引用了原始文件.fsl(有时是同一个.fs源文件),并带有这样的语句(数字是行号):

lex.fs
1      # 1 "/[PROJECT-PATH-HERE]/lex.fsp
...
16     # 16 "/PROJECT-PATH-HERE]/lex.fs
17     // This is the type of tokens accepted by the parser
18     type token =
19       | EOF
...

此外,由.fs生成的文件pars.fsp做同样的事情,但额外引用了.fsi与它一起生成的 F# 签名文件 ( )。这些是什么/意味着什么?

4

1 回答 1

2

您在生成的代码中看到的注释是F# 编译器指令(特别是“line”指令)。

'line' 指令使得当 F# 编译器需要为生成的代码的某些部分发出警告/错误消息时,它可以确定原始文件的哪一部分对应于生成代码的那部分。换句话说,F# 编译器可以参考原始代码生成警告/错误消息,这是导致错误的生成代码的基础。

于 2013-03-15T03:10:04.733 回答