• antlr v4 使用指南连载3——g4文件概览


    g4文件概览#

           在深入介绍之前,有必要先给大家了解一下g4文件的结构,以便对如何编写语法规则文件有个全局的认识,我想这是大有禆益的。因为这样我们就可以很清晰地知道需要的东西写在哪里,或者哪些东西是无法加到antlr中的。

    grammar Name;
    options {...}
    import ...;
    tokens {...}
    @actionName {...}
    <<rule1>>
    ...
    <<rule2>>
    

    这是一个完整的antlr语法规则文件,下面一一做出简要声明:

    1. grammar Name 这是词法跟语法都在同一个文件声明的写法,称之为combined。若要分开,可以使用lexer grammar Name和parser grammar Name。

    2. options 可以是如下四个选项。

      superClass:用于生成xxxLexer.java、xxxParser.java的父类
      language:目标语句,如java
      tokenVocab:toekn词库
      TokenLabelType:默认的是antlr的Token类型,这里可以使用自定义的token类,如MyToken。需要配合TokenFactory使用

    3. import 可以导入各个独立的lexer、parser文件,只能用于combined写法。

    4. actionName 可以是如下内容

      @header:定义类文件头。比如嵌入java的package、import声明
      @member:定义类文件内容。比如类成员、方法

    如果要指定在lexer或者parser中,可以使用 @lexer::membere、@parser::member。

    1. rule 语法规则。

    lexer示例##

    lexer grammar HelloLexer;
    HI : 'H' 'i'
    ID : [a-z]+;
    WS : [	
    
    s]+ -> skip;
    

    parser示例##

    parser grammar HelloParser;
    options {
    	language=Java;
    	tokenVocab=HelloLexer;
    }
    
    @header {
    	package com.laudandjolynn.antlr;
    	import java.util.Set;
    	import java.util.HashSet;
    }
    @member {
    	private int count;
    	public int getCount() {
    		return count;
    	}
    }
    start : HI ID;
    

    未完待续>>>

  • 相关阅读:
    Rsa加密类
    Des加密类
    AES对称加密解密类
    用字符串生成二维码
    ViedoUtil获取视频的缩略图
    UmUtils得到友盟的渠道号
    UiUtils
    StringUtils
    ShockUtil振动工具类
    SHA加密
  • 原文地址:https://www.cnblogs.com/laud/p/antlrv4_3.html
Copyright © 2020-2023  润新知