从 dart2js 或 dart-analyzer 获取类型化语法树
Posted
技术标签:
【中文标题】从 dart2js 或 dart-analyzer 获取类型化语法树【英文标题】:Getting the typed syntax tree from dart2js or dart-analyzer 【发布时间】:2018-01-16 04:32:10 【问题描述】:我想准确地导出 dart 编译器(dart2js 或 dartdevc 或其他)或 dart 分析器的源子集,它可以 1. 转换 dart 代码字符串(或者更好的是每个字符串表示的字符串列表一个编译单元)转换成一个类型化的语法树,2.被翻译成js,3.在浏览器中运行。一般来说,是否有一个标记的子集可以满足这些要求,就是它,我如何才能找到它。
【问题讨论】:
【参考方案1】:使用package:analyzer
完成#1 相当简单,它与用于提供IDE 提示和自动完成等的静态分析器相同。Dart 团队目前正在努力将他们的编译器前端统一在主API 上,但目前, analyzer
绝对可以满足您的大部分需求。
以下是获取语法树并对其进行分析的示例:https://github.com/thosakwe/analyzer_examples/blob/master/analyze_a_file/analyze_a_file.dart
至于 #2,您可能需要分叉 dart-lang/sdk
存储库并对 dart2js
进行自己的调整。它没有作为独立包发布。否则,您可以编写自己的编译器,这可能不会很有趣。
-
我想你必须弄清楚如何让 #2 启动并运行,但假设你可以编译 javascript 源代码,你可以在编译后
eval
它。
要回答您的最后一个问题,不,AFAIK,没有可用的 dart2js
子集可让您创建自己的 Dart-to-JavaScript 编译器。
【讨论】:
答案描述了如何获取 ast 并运行 typer,但没有描述第三步:如何获取类型化的语法树? 示例中函数返回的CompilationUnit就是你要查找的语法树。 如何运行该示例“analyze_a_file.dart”?如何使用 pub 运行它?不是包裹?! 你应该克隆 repo,然后你可以运行示例。以上是关于从 dart2js 或 dart-analyzer 获取类型化语法树的主要内容,如果未能解决你的问题,请参考以下文章