有没有办法让ANTLR4自动删除生成的解析树中的冗余节点?
更具体地说,我一直在试验GLSL的语法,并且由于规则转发需要自动处理运算符优先级,因此在解析树中最终会出现长线性的"表达式"序列.
大多数生成的树节点只是"转发到下一级优先级",因此不提供任何有用的语法信息 - 您只需要每个序列中的最后一个表达式节点(即规则转发停止的点)或者它成为具有多个子节点的实际树节点的点(即在源中遇到实际表达式)...
我希望有一种简单的方法来消除虚拟中间表达式节点 - 这种类型的结构必须在具有运算符优先级的任何语法中都是通用的.
语法的基本结构是从Khronos语言规范中获得的相当直接的克隆:
https://www.khronos.org/registry/gles/specs/3.1/es_spec_3.1.pdf
这将像on:change事件一样。
我没有使用此事件,因为在某些小型库中不会发出此事件,并且暗示是使用绑定和$.
然而,Svelte 似乎没有一个干净的语法。
我只能想到类似的东西
$: {
if (variable) {
doSomething();
}
}
Run Code Online (Sandbox Code Playgroud)
其中每次variable的值发生变化,doSomething()都会运行。
但是语句的使用if很奇怪..如果variable是布尔值怎么办?这样,当变量的值为 false 时,函数将不会运行。
这个想法是在每次变量值发生变化时运行该函数,无论新值实际是什么。
我也尝试过
$: doSomething(variable);
Run Code Online (Sandbox Code Playgroud)
它可以工作,但也很奇怪,因为该函数doSomething可能不需要参数。在这种情况下,参数纯粹是为了添加variable作为此$语法的依赖项......
还尝试了/sf/answers/3989126851/中的答案,但这根本不起作用。文档(/sf/answers/3989126851/)中也没有提到它。
提前致谢!