24

コンパイラの構文ツリーを取得するプロセスはありますか。私たちは、typescript の構文ツリー (オープンソースであるため、コンパイラのコード全体を見ることができる) にアクセスする必要があるプロジェクトに割り当てられていました。しかし、私たちはそれを手に入れる方法を知りません。私はインターネットでいくつかの記事を読んでいますが、ユーザーフレンドリーな記事やリーマン用語で書かれている記事を実際に見つけることができません。最初に行う必要があるステップは、解析ステップを見つけることだと言う人もいたと思います。しかしその後、私たちは次に何をすべきかわかりませんでした。

ノブの質問で申し訳ありません。:)

4

2 に答える 2

14

TypeScript コンパイラ 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"
    },
...
于 2016-06-28T20:57:33.620 に答える
1

特定のコンパイラから AST を取得する必要がありますか、それとも TypeScript のプログラムから構文ツリーを取得するだけですか? 後者に興味がある場合は、TypeScript の BNF 文法を取得し (ここから開始)、たとえば ANTLR を使用する必要があります。プログラムの構文ツリーを視覚化できる ANTLRWorks という名前のツールがあります。

于 2014-02-05T03:18:34.010 に答える