Antlr4 ---语法规则

设计原则

 语法规则的设计遵循“自顶向下”的原则,即由宏观到具体。比如,CSV的语法规则,一个CSV文件由多行组成,每行由多个字段组成,每个字段组成规则等等,如下所示,这种方式更贴近人类的思维和表达方式。

csvFile: hdr row+ ;
hdr : row ;
row : field (',' field)* '\r'? '\n' ;
field
    : TEXT
    | STRING
    |
    ;

TEXT   : ~[,\n\r"]+ ;
STRING : '"' ('""'|~'"')* '"' ; // quote-quote is an escaped quote

规则元素

  • Token序列;
  • 字符串;//‘literal’ 单引号
  • 规则;
  • 规则参数;//向规则函数中传递的参数,参数的书写规则是目标语言,用逗号分隔
  • 通配符;
  • {action} 动作,在元素的间隔中执行;
  • {p} 谓词;

通配符

  • | 表示或
  • * 表示出现0次或以上
  • ? 表示出现0次或1次
  • + 表示出现1次或以上
  • ~ 表示取反

规则文件与解析器的对应关系

 规则文件中的每条规则对应解析器的一个方法和对应的上下文,如下图所示:
在这里插入图片描述

可选标签

  • 含义:为规则中的某个分支打标;
  • 作用:更精准的控制解析过程,分支粒度;如果不用标签,则只能到规则粒度;
    在这里插入图片描述

规则元素标签

 Antlr允许用 = 操作符为规则中的元素添加标签,这样会在规则的上下文对象中添加元素的字段,等号左边为属性名,右边为规则名,如下图所示:
在这里插入图片描述

参考:

  1. https://liangshuang.name/2017/08/20/antlr/
  2. http://yijun1171.github.io/2015/03/30/ANTLR4学习笔记-语法字典-Grammar-Lexicon/
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页