gpt4 book ai didi

F#编译器服务错误地解析程序

转载 作者:行者123 更新时间:2023-12-04 04:10:22 24 4
gpt4 key购买 nike

更新:

我现在意识到这个问题很愚蠢,我应该已经提了这个问题。事后看来,我什至不明白为什么我甚至问了这个问题。
问题在这里:https://github.com/fsharp/FSharp.Compiler.Service/issues/544

原始问题:

我正在使用FSharp编译器服务来解析一些F#代码。
我现在面临的特定代码是:

  let f x y = x+y
let g = f 1
let h = (g 2) + 3

该程序将在最后一行没有 (+)调用的情况下产生TAST。也就是说,编译器服务将返回TAST,就像最后一行只是 let h = g 2一样。

问题是:这是我应该报告的合法错误,还是我丢失了某些东西?

一些注意事项
  • Here is a repo包含最少的复制(我不想在此问题中包括它,因为编译器服务需要大量的跳舞)。
  • let h行之后的
  • Adding more statements不会更改结果。
  • 编译为IL时(与使用Compiler Services解析相比),它似乎可以按预期工作(例如,参见fiddle)
  • If I make g a value,程序可以正确解析。
  • If I make g a normal function(而不是部分应用),程序可以正确解析。
  • 最佳答案

    我没有FSharp.Compiler.Services的先验经验,但是尽管如此,我还是使用Visual Studio的调试器进行了一次小型调查。我分析了以下字符串的抽象语法树:

                """
    module X

    let f x y = x+y
    let g = f 1
    let h = (g 2) + 3
    """

    我发现里面有以下对象:
    App (Val (op_Addition,NormalValUse,D:\file.fs (6,32--6,33) IsSynthetic=false),TType_forall ([T1; T2; T3],TType_fun (TType_var T1,TType_fun (...,...))),...,...,...)

    如您所见,在字符32和33之间的第六行有一个加法。

    F#Interactive无法正确显示它的最可能解释是库中的错误(也许AST处于不一致状态或 pretty-print 损坏了)。我认为您应该在 project's issue tracker中提交一个错误。

    更新:

    可以通过以下方法在调试器中获取上述对象:
    error.[0] 
    (option of Microsoft.FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration.Entity)
    .Item2
    .[2]
    (option of Microsoft.FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration.MemberOrFunctionOrValue)
    .Item3
    .f (private member)
    .Value
    (option of Microsoft.FSharp.Compiler.SourceCodeServices.FSharpExprConvert.ConvExprOnDemand@903)
    .expr

    关于F#编译器服务错误地解析程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36138883/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com