首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何忽略antlr中的下一个X标记?

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

Stack Overflow用户
提问于 2018-07-18 10:47:24
回答 1查看 46关注 0票数 0

我正在尝试使用ANLTR语法对一种语言建模。一个特性是“下一个X参数可以默认”。从语法上看,它如下所示:

代码语言:javascript
运行
复制
f(a=1, b=2, c=3, d=4, e=5)

F是一个参数为a、b、c、d和e的函数,默认值分别为1、2、3、4、5。该语言允许用户“默认下一个X参数”,方法如下:

代码语言:javascript
运行
复制
f(2, 3#, 10)

这里的函数f是用a=2,b/c/d= e=10调用的。

代码语言:javascript
运行
复制
f(2, 2, 3, 4, 10)

在ANTLR4中是否有我可以“跳过下一个X解析器树元素”的特性?语法ANTRL4模型看起来类似于

代码语言:javascript
运行
复制
INT: [0-9]+;
DEFAULT: INT'*';
STRING; // shortened

parameter: INT | DEFAULT_VALUE ((INT | DEFAULT_VALUE) ',')*
functionCall: STRING '(' parameter* ')'

在解析functionCall令牌时,我希望解析DEFAULT_VALUE的值,然后跳过解析下一个DEFAULT_VALUE.INT()令牌。

生成的树看起来就像

  • 函数调用
    • parameter1 (2)
    • parameter5 (10)

而不是

  • 函数调用
    • parameter1 (2)
    • DEFAULT_VALUE(3)
    • parameter5 (10)

  • 函数调用
    • parameter1 (2)
    • parameter2 (2)
    • parameter3 (3)
    • parameter4 (4)
    • parameter5 (10)

另一个解决方案是简单地对DEFAULT_VALUE建模。在解析器树中,我可以忽略下一个函数参数。但是,在将解析器树模型转换为对象模型时,此解决方案将导致大量额外的代码。

EN

回答 1

Stack Overflow用户

发布于 2018-07-19 03:47:20

你不需要一个单独的函数。您只需忽略给定上下文的子节点,只需不访问它们。这取决于你如何走解析树。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51400058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档