.NET TypeScript解析器到AST

时间:2015-07-23 10:32:45

标签: c# .net parsing typescript

我正在寻找TypeScript解析器,它从TypeScript代码生成AST(抽象语法树),就像用Visual Studio创建的代码一样。

我认为Visual Studio必须有这样的解析器,因为它将它用于代码智能。

我知道我可以将TS编译成JS然后使用像Jint来生成AST,但这对我没有好处。我需要AST节点和TS源中的原始行之间的严格关系。

有没有办法让我的手放在VS / Windows dll上获取AST,或者是否有一个提供此类功能的库?我做了一些研究,我发现的所有研究都非常不完整和有限。

有一个用TypeScript编写的Microsoft TypeScript编译器,但如何在C#中使用它?它是否足够快以实时解析编辑过的代码?

为了澄清:我需要用C#或C ++用C#绑定编写的解析器。或者......好吧,它可以用任何语言编写,但可以从C#代码级别访问。我担心我必须编写自己的解析器,但我不想重新发明轮子。

关键是我要想象代码。我不希望代码从C#执行。我只想看到它的结构,它必须准确,没有遗漏的元素。

我见过的大多数解析器/编译器都有数千个LOC,仅用于执行脚本。它们涵盖了非常有限的语言语法子集。我需要恰恰相反。没有运行,但完整的语法。没有控制结构,它们与我的可视化无关。我需要的所有AST都是函数声明和对象定义声明。

我知道有几乎所有用JavaScript编写的可想象语言的解析器/编译器,但有没有用C#编写的好东西?

1 个答案:

答案 0 :(得分:4)

  

我正在寻找TypeScript解析器,它从TypeScript代码生成AST(抽象语法树),就像用Visual Studio创建的代码一样。

查看此部分:http://basarat.gitbooks.io/typescript/content/docs/compiler/parser.html

这是打印出AST的代码示例:

import * as ts from "ntypescript";

function printAllChildren(node: ts.Node, depth = 0) {
    console.log(new Array(depth + 1).join('----'), ts.syntaxKindToName(node.kind), node.pos, node.end);
    depth++;
    node.getChildren().forEach(c=> printAllChildren(c, depth));
}

var sourceCode = `
var foo = 123;
`.trim();

var sourceFile = ts.createSourceFile('foo.ts', sourceCode, ts.ScriptTarget.ES5, true);
printAllChildren(sourceFile);