ANTLR4(十四) 调用在隐藏Channel里的信息

本文介绍了如何在ANTLR4中将空白和注释放入不同的Channel,并演示了如何从隐藏Channel中提取注释,将其放置在声明之前。通过自定义监听器,实现了对tokens流的重构,使得注释能够正确显示。
摘要由CSDN通过智能技术生成

写在之前

我们曾经介绍过这样一种情况:

忽略空白和注释,但在必要的时候也能调用他们。我们的处理方法是:

将不需要的注释和空白放到 channel HIDDEN中。

那么这次,我们尝试将空白和注释放在多个Channel中。

之后我们会用一个例子演示如何读取在隐藏Channel中的信息。

将空白和注释放到不同的Channel中

注意在最新的版本中,以下这种方法已经过时了。

@lexer::members {
   
    public static final int WHITESPACE = 1;
    public static final int COMMENTS = 2;
}
...
WS  :   [ \t\n\r]+ -> channel(WHITESPACE) ;  // channel(1)

SL_COMMENT
    :   '//' .*? '\n' -> channel(COMMENTS)   // channel(2)
    ;

方便起见,我们会直接用数字指定隐藏Channel,而不是标识符

语法文件

我们只列举了需要的部分,即语法文件入口file,语法规则varDecl(变量声明语句),以及空白词法和注释词法。

可以观察到,我们将空白词法移到了Channel1,将注释词法移到了Channel2。(注意默认的Channel是Channel0,其它的Channel都是HIDDEN类型)

//Cymbol.g4
grammar Cymbol;

file:   (functionDecl | varDecl)+ ;

varDecl
    :   type ID ('=' expr)? ';'
    ;
...
WS  :   [ \t\n\r]+ -> channel(1) ;  // channel(1)

SL_COMMENT
    :   '//' .*? '\n' -> channel(2
  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值