首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何制作规则“模板”

问如何制作规则“模板”
EN

Stack Overflow用户
提问于 2018-10-19 00:26:56
回答 1查看 56关注 0票数 1

我有这样的语法:

代码语言:javascript
复制
start : topDef* EOF ;
topDef : topId '(' scopeDef* ')' ;
topId : UPPER_ID ;
scopeDef : scopeId '(' scopeDef* ')' ;
scopeId : LOWER_ID NUMBER? ;

UPPER_ID : [A-Z] [A-Za-z0-9_]* ;
LOWER_ID : [a-z] [A-Za-z0-9_]* ;
NUMBER : [0-9]+ ;
WS : [ \t\r\n]+ -> skip ;

可以看到,除了id子规则之外,topDef和scopeDef是相同的。有什么方法可以把这些定义包装成一个定义吗?也许是一种模板规则的方法,比如

代码语言:javascript
复制
start : def<topId>* EOF ;
def<id> : id '(' def<scopeId>* ')' ;
topId : UPPER_ID ;
scopeId : LOWER_ID NUMBER? ;

或者类似的事情

代码语言:javascript
复制
scopeDef : topDef except(topId : LOWER_ID NUMBER?) ;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-19 16:15:48

没有谓词(在下面的示例中包含特定于目标的代码,Java ):

代码语言:javascript
复制
start : def[true]* EOF ;

def[boolean isTopDef]
 : ( {$isTopDef}? topId | scopeId ) '(' def[false]* ')'
 ;

topId : UPPER_ID ;
scopeId : LOWER_ID NUMBER? ;

所以答案是肯定的,你能做到,但如果我是你,我就不会。

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

https://stackoverflow.com/questions/52884306

复制
相关文章

相似问题

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