Cam*_*art 8 f# abstract-syntax-tree
我想使用抽象语法树为.fs文件生成F#代码.我能够使用Roslyn API生成.cs文件.这是一个示例riak.cs文件,单元测试基于riak.proto生成.我想在F#中做同样的事情.我还不想创建一个类型提供者.有没有人有任何使用FSharp.Compiler.Service的例子,可能与Fantomas一起使用?
Fantomas肯定是正确看待这里的东西.如果要生成F#源代码,基本上需要两件事:
构建代表您要构建的源代码的AST.为此,您需要使用F#编译器服务中的无类型AST.该类型化语法树页文档您如何处理它,但它应该是了解它一个很好的起点.表达式的AST由SynExpr类型定义.
构建AST后,需要对其进行格式化.F#编译器不包含漂亮的打印机,但这正是Fantomas在CodePrinter文件中所做的,所以你应该能够复制它并将你的AST传递给那里实现的格式.我认为Visual F#PowerTools可能实际上有更新版本的Fantomas,所以先检查一下.
这个答案都是使用无类型的 AST,这可能非常适合处理语言的语法.还有类型化的 AST(在类型推断完成后创建),但这很难使用,并且不适合这里.