当前位置: 首页 > article >正文

java-在ANTLR中BaseListner的方法和词法规则的关系0.5.0

java-在ANTLR中BaseListner的方法和词法规则的关系0.5.0

    • 环境介绍
    • 词法规则与类方法的对应关系
    • ClassOrInterfaceModifierContext与词法对应关系
    • 参考

环境介绍

  1. java.g4
  2. idea
  3. windows10

词法规则与类方法的对应关系

随便找一个词法规则,如ClassOrInterfaceModifier,参考java.g4文件定义如下

classOrInterfaceModifier
    :   annotation       // class or interface
    |   (   'public'     // class or interface
        |   'protected'  // class or interface
        |   'private'    // class or interface
        |   'static'     // class or interface
        |   'abstract'   // class or interface
        |   'final'      // class only -- does not apply to interfaces
        |   'strictfp'   // class or interface
        )
    ;

在BaseListner生成后,就会生产对应的两个方法一个enter,一个是exit如下

	/**
	 * {@inheritDoc}
	 *
	 * <p>The default implementation does nothing.</p>
	 */
	@Override public void enterClassOrInterfaceModifier(JavaParser.ClassOrInterfaceModifierContext ctx) { }
	/**
	 * {@inheritDoc}
	 *
	 * <p>The default implementation does nothing.</p>
	 */
	@Override public void exitClassOrInterfaceModifier(JavaParser.ClassOrInterfaceModifierContext ctx) { }

ClassOrInterfaceModifierContext与词法对应关系

ClassOrInterfaceModifierContext在BaseListener中缩写为ctx,这个ctx就表示的整个的词法规则,因此我们可以通过如下方法访问具体的规则:

  1. 以如下类名public static class myVisitor extends HelloBaseVisitor中的public和static为例,遍历public static时会两次触发listener

  2. 访问ctx.PUBLIC(): 获取当前是否是public,如果是static就返回public,不是public,就会返回为null

  3. 访问ctx.STATIC(): 获取当前是否是static,如果是static就返回static,不是static,就会返回为null

  4. 也可以使用ctx.annotation()去访问规则的另外一个备选分支

参考

java.g4文件获取以及BaseListner的生成可以参考

https://blog.csdn.net/m0_60688978/article/details/142166606


http://www.kler.cn/a/300774.html

相关文章:

  • 【2024年华为OD机试】 (C卷,100分)- 小明找位置(Java JS PythonC/C++)
  • 1.17组会汇报
  • 大疆发布可折叠航拍无人机,仅重249g,支持 4800 万像素拍摄
  • 达梦8-DMSQL程序设计学习笔记1-DMSQL程序简介
  • Docker PG流复制搭建实操
  • 优化 Vue项目中 app.js 文件过大,初始化加载过慢、带宽占用过大等问题
  • 【Go】Go语言中的基本数据类型与类型转换
  • 大白话!解析大模型原理!
  • 系统设计文档示例
  • 正版软件 | Sticky Password 终身密码管理器 - 使用教程分享
  • Flask 第四课 -- 基本概念
  • Weakly-Supervised Video Moment Retrieval via Semantic Completion Network 论文阅读
  • 【Django】Django AI 聊天机器人项目:基于 ChatGPT 的 Django REST API
  • 优惠券线下使用情况数据分析
  • k8s防火墙networkPolicy,其他规则和端口规则ports的匹配顺序,进站策略ingress和出站策略egress中,ports规则的常用方法。
  • 【绝对有用】顶尖ChatGPT学术论文指令集
  • 【TabBar嵌套Navigation案例-复习昨天的内容-预习今天的内容 Objective-C语言】
  • JavaEE:多线程进阶(JUC [java.util.concurrent] 的常见类)
  • 论文学习笔记 VMamba: Visual State Space Model
  • Spring Boot 集成 MinIO 与 KKFile 实现文件预览功能
  • Mac在Python项目中通过opencv模版匹配定位不到图片
  • Unity面试:什么是UnityEvent?
  • 《 C++ 修炼全景指南:七 》优先级队列在行动:解密 C++ priority_queue 的实现与应用
  • 解锁SAP数据的潜力:SNP Glue与SAP Datasphere的协同作用
  • 【秋招笔试】9.05小米秋招改编题(算法岗)-三语言题解
  • 逆转链表的三种方法