词法规则入门

黄金定律一二

  1. 若输入串能被多个词法规则匹配,那么声明在词法文件最前面的规则生效。

parser

parser grammar HelloParser;
options {language=Java;tokenVocab=HelloLexer;
}start : HI ID;

lexer例1

lexer grammar HelloLexer;   //Definea grammar called Hello
ID : [a-zA-Z]+;
HI : 'H' 'I';
WS : [\t\r\n ]+->skip;  //skip spaces,tabs,newlines,\r(Windows)

lexer例2

lexer grammar HelloLexer;   //Definea grammar called Hello
HI : 'H' 'I';
ID : [a-zA-Z]+;
WS : [\t\r\n ]+->skip;  //skip spaces,tabs,newlines,\r(Windows)

当输入串为HI antlr时,对于语法规则start,只有使用例2的词法文件时,才能匹配成功。原因在于,这两个例子中,HI可以被词法规则HI、ID匹配。对于例1,输入串HI,被词法ID优先匹配,antlr也被ID词法匹配,所以无法匹配语法规则start : HI ID;。对于例2,输入串HI,被词法HI优先匹配,antlr被ID词法匹配。

  1. 输入串将被最长匹配的词法规则匹配。下面用一个稍微复杂一点的例子来说明,本来可以不用例子,一句话也能说明白。比如ABCD肯定会被能完全匹配ABCD的词法规则匹配,而不是将ABCD拆开分别被匹配,例如被两个词法ABC、D匹配。

parser

parser grammar HelloParser;
options {language=Java;tokenVocab=HelloLexer;
}
numeric_literal : INTEGER | NUMERIC;

lexer

//lexer
lexer grammar HelloLexer;   //Definea grammar called Hello
ZERO : '0';
DOT : '.';
UNDERLINE : '_';
HI : 'H' 'I';fragmentDIGIT : [0-9];INTEGER : ZERO|[1-9] DIGIT*;
NUMERIC : INTEGER DOT DIGIT+;
ALPHABET : [a-zA-Z];
ID : (ALPHABET|UNDERLINE) (DIGIT|ALPHABET|UNDERLINE)+;
WS : [\t\r\n ]+->skip;  //skip spaces,tabs,newlines,\r(Windows)

对于输入串12.03,只会被NUMERIC词法匹配,而不会被拆成12.03分别被INTEGER、DOT、INTEGER、INTEGER匹配。这就是最长匹配原则,也叫贪婪匹配。

未完待续>>>

转载于:https://www.cnblogs.com/laud/p/antlr4_4.html

antlr v4 使用指南连载4——词法规则入门之黄金定律相关推荐

  1. antlr4 for linux,ANTLR v4 安装以及试用 For Linux

    ANTLR 简介 ANTLR-Another Tool for Language Recognition,Antlr 本身是使用 Java 开发的,它为包括Java,Python,C#在内的语言提供了 ...

  2. 《ANTLR 4权威指南》——2.1节从ANTLR元语言开始

    本节书摘来自华章社区<ANTLR 4权威指南>一书中的第2章,第2.1节从ANTLR元语言开始,作者[美] 特恩斯·帕尔(Terence Parr),更多章节内容可以访问云栖社区" ...

  3. 《ANTLR 4权威指南 》一导读

    前 言 ANTLR是一款强大的语法分析器生成工具,可用于读取.处理.执行和翻译结构化的文本或二进制文件.它被广泛应用于学术领域和工业生产实践,是众多语言.工具和框架的基石.Twitter搜索使用ANT ...

  4. Antlr4 ---词法规则

    规则存放位置  词法规则既可以和语法规则写在同一个文件{xxx}.g4,也可以单独放在词法规则文件{xxx}Lexer.g4: 匹配原则 最长匹配原则: 输入串将被最长匹配的词法规则匹配: 优先声明原 ...

  5. Antlr v4入门教程和实践

    一.ANTRL 是什么 当我们实现一种语言时,我们需要构建读取句子(sentence)的应用,并对输入中的元素做出反应.如果应用计算或执行句子,我们就叫它解释器(interpreter),包括计算器. ...

  6. Cisco *** 完全配置指南-连载-PIX和ASA连接的故障诊断与排除

    Cisco *** 完全配置指南-连载-PIX和ASA连接的故障诊断与排除 一.ISAKMP/IKE阶段1连接<?xml:namespace prefix = o ns = "urn: ...

  7. Cisco ××× 完全配置指南-连载-IOS ×××阶段2连接详解

    Cisco ××× 完全配置指南-连载-IOS ×××阶段2连接详解 详细配置见附件 转载于:https://blog.51cto.com/xuanbo/151764

  8. Cisco ××× 完全配置指南-连载-PIX和ASA连接的故障诊断与排除

    Cisco ××× 完全配置指南-连载-PIX和ASA连接的故障诊断与排除 一.ISAKMP/IKE阶段1连接<?xml:namespace prefix = o ns = "urn: ...

  9. 一个基本c语言注释用什么字符,C语言的词法规则京鸿智武 今天提纲:本文主要介绍了C语言中...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 C语言的词法规则 京鸿智武 今天 提纲:本文主要介绍了C语言中的词法规则,包括字符.注释.接续符.标识符 一.字符 1.字符集都包括什么? 标准规定字符集 ...

最新文章

  1. Java图形化界面设计——容器(JFrame)
  2. vue的$nextTick使用总结,this.$refs为undefined的解决办法,element Ui的树形控件setCheckedKeys方法无法使用
  3. 30个图片浏览插件收集
  4. 【剑指offer - C++/Java】6、旋转数组的最小数字
  5. visuall assist x 破解方法
  6. 8年了,这几个时间API你用过吗?
  7. 计算机减法英语,英语的加减乘除如何表达?
  8. sigar取得进程信息
  9. mac和win电脑在同一局域网下互传文件
  10. Chapter Three : Python 序列之字符串操作详解
  11. db2的节点编目和数据库编目
  12. 安利好用的idea查看日志的插件Grep Consol
  13. 一个时代的印记:还记得那些年我们逃课去的网吧
  14. Time::HiRes, sleep(), time()
  15. C#中转义字符\r, \n, \r\n, \t, \b, @作用
  16. 第十一章 软件保护技术(一)(软件保护技术简介)
  17. Springboot毕业设计毕设作品,农产品销售系统设计与实现
  18. Xilinx FPGA 的快速启动
  19. StringBuilder连接字符串
  20. 群晖利用tinyMediaManager实现PC端刮削影视信息

热门文章

  1. 第 4 章 jQuery
  2. EasyGBS级联时设备invite超时,平台可向上级回复code=400消息
  3. 祖玛java代码_androidzuma 基于java开发的安卓祖玛龙珠游戏代码,可帮助 的 学习。 Develop 238万源代码下载- www.pudn.com...
  4. 安装python时提示 0x80070659系统策略禁止这个安装,请与管理员联系
  5. 2014深圳吉祥腾达校园招聘 [李园7舍_404]
  6. 使用DDNS搭建Wireguard服务器的一个小问题
  7. Linux基本指令学习笔记
  8. 陆奇:建立一个繁荣的创业者社区
  9. vue仿今日头条_微信小程序仿今日头条导航栏滚动解析
  10. 学习GDI+画出汽车行进路线c#(winform)