我正在寻找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#编写的好东西?
答案 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);