我正在尝试使用ANLTR语法对一种语言建模。一个特性是“下一个X参数可以默认”。从语法上看,它如下所示:
f(a=1, b=2, c=3, d=4, e=5)F是一个参数为a、b、c、d和e的函数,默认值分别为1、2、3、4、5。该语言允许用户“默认下一个X参数”,方法如下:
f(2, 3#, 10)这里的函数f是用a=2,b/c/d= e=10调用的。
f(2, 2, 3, 4, 10)在ANTLR4中是否有我可以“跳过下一个X解析器树元素”的特性?语法ANTRL4模型看起来类似于
INT: [0-9]+;
DEFAULT: INT'*';
STRING; // shortened
parameter: INT | DEFAULT_VALUE ((INT | DEFAULT_VALUE) ',')*
functionCall: STRING '(' parameter* ')'在解析functionCall令牌时,我希望解析DEFAULT_VALUE的值,然后跳过解析下一个DEFAULT_VALUE.INT()令牌。
生成的树看起来就像
而不是
或
另一个解决方案是简单地对DEFAULT_VALUE建模。在解析器树中,我可以忽略下一个函数参数。但是,在将解析器树模型转换为对象模型时,此解决方案将导致大量额外的代码。
发布于 2018-07-19 03:47:20
你不需要一个单独的函数。您只需忽略给定上下文的子节点,只需不访问它们。这取决于你如何走解析树。
https://stackoverflow.com/questions/51400058
复制相似问题