我正在为具有称为“块”的结构的模板(如 jinja、Twig)语言构建一个 linter 程序。
我相信你们中的许多人都熟悉模板语言中块的概念。现在,包含这些块的模板可以被另一个模板覆盖,子模板具有相同的块名称,并为它定义自己的内容和功能。
因此,在评估给定的源代码(用于范围检查)时,要求是我首先独立评估子模板中的所有块。然后,我必须将块放置在根模板中定义它们的位置,并且应该再次进行评估,以检查是否违反了根模板的模板范围属性(变量、宏等)。
我开始使用 ANTLR4 访问子模板。所以在 ANTLR 中,我点击了块,我在那里评估它,然后在根模板的解析树上调用另一个访问者。
但是如何将子块的内容放在根模板中进行评估?ANTLR4 中没有树修改/突变。我是整个编译器和解析器范例的新手。考虑到我的要求,谁能建议从这里采取的最佳方法是什么?我也准备好回答你的任何其他问题,以防你觉得问题太模糊,或者我没有提供足够的信息。