如何忽略antlr中的下一个X标记?

时间:2018-07-18 10:47:24

标签: antlr4

我正在尝试使用ANLTR语法为语言建模。一个功能是“下一个X参数可以默认设置”。从语法上看,它类似于以下内容: 考虑

f(a=1, b=2, c=3, d=4, e=5)

f是具有5个参数a,b,c,d和e的函数,分别具有默认值1、2、3、4、5。该语言允许用户通过指定以下内容来“默认下一个X参数”所以:

f(2, 3#, 10)

此处的函数f用a = 2,b / c / d = default和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()令牌。

然后生成的树看起来像

  • 函数调用
    • 参数1(2)
    • 参数5(10)

代替

  • 函数调用
    • 参数1(2)
    • DEFAULT_VALUE(3)
    • 参数5(10)

  • 函数调用
    • 参数1(2)
    • 参数2(2)
    • parameter3(3)
    • 参数4(4)
    • 参数5(10)

另一种解决方案是仅对DEFAULT_VALUE建模。然后,在解析器树中,我可以忽略下一个函数参数。但是,这种解决方案在从解析器树模型到对象模型的转换中将导致大量额外的代码。

1 个答案:

答案 0 :(得分:0)

您不需要单独的功能。您可以通过不访问它们来简单地忽略给定上下文的子节点。您如何走解析树取决于您。