API-интерфейс компилятора TypeScript действительно очень прост в использовании. Чтобы разобрать файл машинописи и получить AST, попробуйте следующее:
const ts = require('typescript');
const sourceFile = ts.createSourceFile(filename,
fs.readFileSync(filename).toString(), ts.ScriptTarget.ES6, false);
console.log(sourceFile.ast);
Это создает AST, например:
{
"kind": 251,
"pos": 0,
"end": 1097,
"flags": 0,
"bindDiagnostics": [],
"languageVersion": 2,
"fileName": "slidingWindow.ts",
"languageVariant": 0,
"scriptKind": 3,
"referencedFiles": [],
"amdDependencies": [],
"statements": [
{
"kind": 218,
"pos": 0,
"end": 69,
"flags": 0,
"name": {
"kind": 69,
"pos": 10,
"end": 22,
"flags": 0,
"text": "Accumulator",
"kindDecoded": "Identifier"
},
"members": [
{
"kind": 148,
"pos": 24,
"end": 67,
"flags": 0,
"parameters": [
{
"kind": 139,
"pos": 28,
"end": 42,
"flags": 0,
"name": {
"kind": 69,
"pos": 28,
"end": 32,
"flags": 0,
"text": "data",
"kindDecoded": "Identifier"
},
"type": {
"kind": 157,
"pos": 33,
"end": 42,
"flags": 0,
"elementType": {
"kind": 128,
"pos": 33,
"end": 40,
"flags": 0,
"kindDecoded": "NumberKeyword"
},
"kindDecoded": "ArrayType"
},
"kindDecoded": "Parameter"
},
{
"kind": 139,
"pos": 43,
"end": 57,
"flags": 0,
"name": {
"kind": 69,
"pos": 43,
"end": 49,
"flags": 0,
"text": "index",
"kindDecoded": "Identifier"
},
"type": {
"kind": 128,
"pos": 50,
"end": 57,
"flags": 0,
"kindDecoded": "NumberKeyword"
},
"kindDecoded": "Parameter"
}
],
"type": {
"kind": 128,
"pos": 59,
"end": 66,
"flags": 0,
"kindDecoded": "NumberKeyword"
},
"kindDecoded": "CallSignature"
}
],
"kindDecoded": "InterfaceDeclaration"
},
...
Там не много помощи для вас, за исключением, возможно, от кого-то есть уже вырыто через этот код. Что вы изучаете, так это то, что в большой части программного обеспечения трудно найти свой путь. Вам нужно потратить время на рытье в источнике. Очевидным трюком является поиск исходного кода для слов «parse», «tree» и «node»; код для определения/построения АСТ, несомненно, близок к тому, где один из них найден, если код не ужасен. Для этой цели стандартными инструментами, любимыми многими программистами, являются «grep». Если вы не знаете, что это такое, узнайте в Википедии. –
Ответы на этот более поздний вопрос могут быть полезны ... [TypeScript: получить дерево синтаксиса] (http://stackoverflow.com/questions/20187928/typescript-get-syntax-tree) – Fenton
Я написал ответ о том, как получить C# в AST, прежде чем понять, что такое TypeScript. Есть ли причина, по которой отмечен C#? – Chuu