我一直在使用fslex和fsyacc,而他们从词法分析器(.fs
)和解析器(.fsl
)规则生成的F#源文件(.fsp
引用原始{ {1}}(有时候是同一个.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
文件执行相同类型的操作,但另外还引用了与其一起生成的F#签名文件(pars.fsp
)。这有什么作用/意味着什么?
答案 0 :(得分:2)
您在生成的代码中看到的注释是F# Compiler Directives(具体而言,'行'指令)。
''指令使得当F#编译器需要为生成的代码的某些部分发出警告/错误消息时,它有一种方法可以确定原始文件的哪一部分对应于该部分的生成的代码。换句话说,F#编译器可以生成引用原始代码的警告/错误消息,这是导致错误的生成代码的基础。