小编Jav*_*era的帖子

是否可以从antlr4中解析器定义的标签中检索列表?

采取这个虚拟的 antlr4 语法:

grammar testingGrammar;
@header{package gen;}

dsopt_rename: 'rename' (OLDN=ID '=' NEWN=ID)+;
ID: [a-zA-Z_];
Run Code Online (Sandbox Code Playgroud)

我的目标是java。我想得到两个列表:oldNames 和 newNames;可以这样做:

@Override
public DsOption visitDsopt_rename(Dsopt_renameContext ctx) {    
    LinkedList<String> oldNames = new LinkedList<String>();
    LinkedList<String> newNames = new LinkedList<String>();
    for (int i=0; i < ctx.ID().size(); ++i) {
        LinkedList<String> rename = (i%2 == 1) ? oldNames : newNames;
        rename.add(ctx.ID(i).getText());
    }
    return new DsOptRename(oldNames, newNames);
}
Run Code Online (Sandbox Code Playgroud)

我更喜欢以下方法 - 也称为“第二种方法” - (如果它有效的话):

@Override
public DsOption visitDsopt_rename(Dsopt_renameContext ctx) {    
    LinkedList<String> oldNames = new LinkedList<String>();
    LinkedList<String> newNames = new LinkedList<String>();
    ctx.OLDN().forEach(e …
Run Code Online (Sandbox Code Playgroud)

antlr antlr4

3
推荐指数
1
解决办法
638
查看次数

标签 统计

antlr ×1

antlr4 ×1