临时专栏-无用
临时专栏-无用
优惠券已抵扣
余额抵扣
还需支付
¥29.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
九师兄
可免费问问题,可以一次订阅,终身免费问问题。工作多年遇到的问题,与一些总结,注意事项等,有些是源码级别的讲解,同时整个博客是成体系的,里面有很多连接互相连接,问题都是拆开的,能让大家遇到问题的时候方便的解决问题,或者提供思路。也可以单独找我解决问题。
展开
-
【Antlr】完整案例一次带你完全学会使用antlr、Antlr 实战之 处理行级别的日志
为了展示最终的程序对我们构建词法分析器和语法分析器过程的影响,想象一个场景,我们在处理一个网络服务器上的日志文件,日志文件的每行包含一条记录。我们将逐渐增加程序的需求,在这个过程中分析词法分析器和语法分析器之间的界线是如何移动的。我们的大脑很自然地从这些不同的词法元素中提取出了信息,不过,如果我们想要的只是统计文件的总行数,我们就可以忽略除换行符之外的一切字符。在上面的结构中,词法分析器不需要识别太多东西,语法分析器也只需匹配换行符序列 (~x运算符匹配除x之外的任何字符)。原创 2024-01-01 13:02:35 · 1689 阅读 · 3 评论 -
【Antlr】Antlr 处理优先级、左递归、结合性
上面的例子中的expr规则是直接左递归的,因为除INT之外的所有备选分支都以expr规则本身开头(它同时也是右递归 (right recursive) 的,因为它的某些备选分支在最右侧引用了expr)。它们的差异在于,中间的语法分析树表示将1加到2和3相乘的结果上去,而右侧的语法分析树表示将1和2相加的结果与3相乘。在自顶向下的语法和手工编写的递归下降语法分析器中,处理表达式都是一件相当棘手的事情,这首先是因为大多数语法都存在歧义,其次是因为大多数语言的规范使用了一种特殊的递归方式,称为。原创 2023-12-27 21:33:37 · 1201 阅读 · 0 评论 -
【Antlr】Antlr 几种常见的计算机语言模式
它是一个有限长度或者任意长度的序列,序列中的元素可以是词法行号或者子规则。原创 2023-12-27 21:33:13 · 381 阅读 · 0 评论 -
【Antlr】Antlr 核心标记
Antlr 核心标记原创 2023-12-27 08:58:54 · 414 阅读 · 1 评论 -
【Antlr】ANTLR 4中何时需要EOF?
最近要分析一个G4文件,想看看这个是怎么设计的,然后在第一行,遇到如下的G4文件定义然后看到EOF,然后在整个文件里面没有查到这个文件的定义,所以这个应该是内置的,既然是内置的,那么这个代表什么意思呢?经过查询发现ANTLRWorks2中的TestDriver在何时接受不带语法和显式EOF的语法以及何时不接受语法的方法似乎有些挑剔。《 ANTLR4入门指南》中的Hello语法在任何地方都没有使用EOF,因此我推断最好避免使用显式的EOF。使用EOF的最佳实践是什么?您何时真正需要它?原创 2023-12-27 08:52:03 · 521 阅读 · 0 评论 -
【Antlr】使用 Antlr 识别常见的语言模式
本章摘抄自:Antlr4权威指南,并且对其进行补充。现在,我们已经掌握了一种自顶向下的、草拟一个语法的策略,在之前的章节中,我们见过这些模式的一些例子。随着学习的深入,我们会用正式的语法规则将特定的模式表达出来,通过这种方式,我们就能够掌握基本的ANTLR标记的用法。下面,让我们开始学习这些最常见的语言模式吧。原创 2023-12-25 13:13:21 · 979 阅读 · 1 评论 -
【Antlr】Antlr 如何写语法文件、自顶向下的设计模式、先全局后细节的设计模式
你应该已经明白了这个过程,从最高的层次开始,逐渐向下进行,将像是Java类定义这样巨大的语言结构分解为若千条稍后定义的规则。由关键字class开始,之后是一个标识符、可选的父类名 (superclass specifier)、可选的实现语句(implements clause),以及类的定义体 (class body)。所以,我们的第一个任务是找到最粗粒度的语言结构,将它作为我们的起始规则。不过,在深入研究语法的细节之前,有件大有裨益的事情是:讨论语法的整体结构以及如何建立初始的语法框架。原创 2023-12-25 13:12:37 · 910 阅读 · 0 评论 -
【Antlr4】Antlr4利用监听器构建一个翻译程序
想象一下,你的老板让你编写一个工具,用来将一个Java类中的全部方法抽取出来,生成一个接口文件。Java语法分析树是由解析Java语言的语法分析器生成的,本书的源代码中提供了Java语言的ANTLR语法。我们将会从类定义中提取类名,用它来命名生成的接口,然后从类的方法定义中获取方法签名(返回值、方法名,以及参数列表)。访问器机制和监听器机制的最大的区别在于,监听器的方法会被ANTLR提供的遍历器对象自动调用,而在访问器的方法中,必须显式调用visit方法来访问子节点。的后果就是对应的子树将不会被访问。原创 2023-12-22 22:34:33 · 416 阅读 · 1 评论 -
【Antlr】Antlr实现计算器、并且增加clear方法
这是一个锻炼你的好机会,让你亲自动手进行实际操作,而又无须深入了解全部细节。clear命令会将计算器的“内存”清空(即EvalVisitor的memory成员),你需要在stat 规则中增加一个新备选分支来识别它。来给这个新的备选分支加上标签,然后对修改后的语法运行ANTLR命令,获得生成的访问器接口。然后,为了能在接收clear命令的时候作出响应,你需要实现visitClear。本文是对Antlr权威指南第4章节,利用访问器构建一个计算器,里面的补充,里面结尾如下。ClearVisitor方法如下。原创 2023-12-21 17:53:35 · 422 阅读 · 1 评论 -
【Antlr】Antlr 拟人化 分析 G4 文件
假设我们定义了如下的词汇A 代表 小红 B 代表 小澜 C 代表 喜欢 D 代表 讨厌我们可以自由定于句子A C B 代表 小红喜欢小澜 B C A 代表 小澜讨厌小红。原创 2023-12-21 15:12:25 · 1150 阅读 · 2 评论 -
【Antlr】ANTLR 语法设计
一种语言模式就是一种递归的语法结构。我们需要从一系列有代表性的输入文件中归纳出一门语言的结构。在完成这样的归纳工作后,我们就可以正式使用ANTLR语法来表达这门语言了。编写语法和编写软件很相似,差异在于我们处理的是语言规则,而非函数或者过程(procedure讨论语法的整体结构以及如何建立初始的语法框架。语法由一个为该语法命名的头部定义和一系列可以相互引用的语言规则组成。...设计良好的语法反映了编程世界中的功能分解或者自顶向下的设计。原创 2024-01-03 16:57:22 · 927 阅读 · 0 评论 -
【Antlr】使用语义判定修改语法分析过程
上一篇文章:antlr 权威指南并且补充在上一章中,我们学习了如何在语法中嵌入动作,以便在语法分析的过程中执行应用的相关逻辑。无论如何,这些动作代码都不会影响语法分析器的语法分析过程,就好像记录日志的语句 不会影响外围程序一样。我们的内嵌动作仅仅是计算一些值或者打印结果。但是,在一些罕见情况下,使用内嵌动作来修改语法分析过程是正确识别某些编程语言语句的唯一方法。在本章中,我们将会学习一种特殊的动作{...}?,称为语义判定。。一个令人难以置信的事实是,语义判定可以在两种常见的情况下发挥作用。原创 2019-07-02 11:29:42 · 8565 阅读 · 2 评论 -
【Antlr】Antlr 资料 学习 网站
1.概述https://www.cntofu.com/book/115/precedence-left-recursion-associativity.md原创 2021-07-11 16:44:58 · 304 阅读 · 0 评论 -
【Antlr】修改由Antlr生成的表示式?替换遍历方式?
1.概述我想使用Antlr4读取表示式并且其進行一些修改。例如,如果语法是算术运算,我將修改表示式,表示2 * (3 + 1)與2 * 4然後用8這是“計算”或“簡化”。要執行此操作,我將建立一些樹結構,第一個想法是使用由Antlr建立的相同的樹。不幸的是,我沒有看到任何針對兒童的二傳手。如何完成?我真的應該用自己的樹來複制Antlr樹以表達邏輯嗎?...原创 2021-07-11 15:26:55 · 312 阅读 · 0 评论 -
【Antlr】Antler 解析 没有进入 visit 相关方法中 一个愚蠢的问题
1.概述我代码这样构建了一个方法 @Test public void setDicType1() throws BaasMonitorException { String condition = "srcAddress contains \"\\{\" "; ParseTree tree = SqlGenerateUtil.getParseTree(condition, ResultEnum.CONSTANT_CONDITION.msg).entry();.原创 2021-04-12 23:27:45 · 282 阅读 · 0 评论 -
【antlr】antlr语法中的fragment
grammar justDemo; ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* ; INT : '0'..'9'+ ; FLOAT : ('0'..'9')+ '.' ('0'..'9')* EXPONENT? | '.' ('0'..'9')+ EXPONENT? | ('0'..'9')+ EXPONENT ; COMMENT :原创 2021-02-01 22:08:15 · 1184 阅读 · 0 评论 -
【Antlr】Antlr preview 不能使用了
1.背景IDEA下ANTLR Preview的使用到那时最近点击antlr preview 没反应了解决下图中先把antlr插件勾选去掉,然后重启,然后再次勾选上,然后再次重启就可以了原创 2021-01-06 21:29:59 · 686 阅读 · 0 评论 -
【Antlr】Antlr 孤岛语法:处理相同文件中的不同格式
1.概述ANTLR有三个与词法符号有关非常棒的特性,值得付诸笔墨。首先,我们将会尝试处理XML .这样的具有不同词法结构的输入格式(标签内外不同)。其次,我们将会学习通过修改输入的词法符号流,在Java类中插入一个字段的方法。它将会展示,如何以最低的代价来生成和输入内容相似的输出。最后,我们将会看到ANTLR语法分析器如何忽略空白字符和注释,同时不丢弃它们。2.孤岛语法:处理相同文件中的不同格式迄今为止,我们看到的样例输入文件都只包含一种语言,但是事实上,有很多常见的文件格式包含多重语言。例如,.原创 2020-06-29 22:26:45 · 818 阅读 · 0 评论 -
【Antlr】Antlr 在语法中嵌入任意动作
1.概述参考Antlr4 权威指南 4.4 章节g4 文件如下grammar Rows;@parser::members { // add members to generated RowsParser int col; public RowsParser(TokenStream input, int col) { // custom constructor this(input); this.col = col; }}file: (.原创 2020-06-29 22:26:54 · 817 阅读 · 0 评论 -
【Antlr】Antlr API 简介
antlr包结构介绍,以及简单的api解释原创 2020-06-29 22:27:25 · 1471 阅读 · 0 评论 -
【Antlr】Antlr将词法符号送入不同的通道、处理注释
1.概述绝大多数编程语言忽略词法符号间的空格和注释,这意味着它们可以出现在任何地方。这就给语法分析器带来了一个难题,它必须时刻考虑两种可选的词法符号的存在:空白字符和注释。常见的解决方案是, 令词法分析器匹配这些词法符号并丢弃。examples/Cymbol.g4WS : [ \t\n\r]+ -> skip ;SL_COMMENT : '//' .*? 'In' -> skip ;在绝大多数情况下,因为注释不影响生成的代码,这种方案表现出色例如编译器。另一方面,如果我们在.原创 2020-06-29 22:27:31 · 780 阅读 · 0 评论 -
【Antlr】Antlr 自动错误恢复机制
antlr 权威指南并且补充错误恢复指的是允许语法分析器在发现语法错误后还能继续的机制。原则上,最好的错误恢复来自人类在手工编写的递归下降的语法分析器中进行的干预。尽管如此,按照我的经验,手工编写一个优秀的错误恢复机制非常难,因为这个过程过于枯燥乏味,极易出错。在本书描述的ANTLR最新版中,我穷尽我毕生所学,基于多年的经验,来为ANTLR语法提供良好的错误恢复机制。原创 2020-06-27 17:13:24 · 950 阅读 · 2 评论 -
【Antlr】 Antlr 错误与恢复
1.概述参考:Antlr4 第九章 错误与恢复g4文件grammar Simple;prog: classDef+ ; // match one or more class definitionsclassDef : 'class' ID '{' member+ '}' // a class has one or more members {System.out.println("class "+$ID.getText());} ;member .原创 2020-06-27 17:13:32 · 791 阅读 · 0 评论 -
【Antlr】unknown attribute text for rule stat in $stat.text
g4文件如下,编译报错' {' {这里是(注: ANTLR 4.3之后,原先的$stat.text需要改成。译者注)改成如下就好了' {' {原创 2020-06-29 22:27:38 · 589 阅读 · 0 评论 -
【Antlr】Antlr生成调用图
1.概述参考:Antlr权威指南 8.3 章g4文件如下/** Simple statically-typed programming language with functions and variables * taken from "Language Implementation Patterns" book. */grammar Cymbol;file: (functionDecl | varDecl)+ ;varDecl : type ID ('=' exp.原创 2020-06-29 22:27:44 · 820 阅读 · 0 评论 -
【Antlr】Antlr 将 CSV文件 转成Map数据结构
1.概述数据如下Details,Month,AmountMid Bonus,June,"$2,000",January,"""zippo"""Total Bonuses,"","$5,000"G4文件如下grammar CSV;file : hdr row+ ;hdr : row ;row : field (',' field)* '\r'? '\n' ;field : TEXT # text | STRING # string | # e.原创 2020-06-29 22:27:52 · 624 阅读 · 0 评论 -
【Antlr】识别常见的词法结构
1.概述语法分析器通过输入的词法符号流来识别特定的语言结构词法分析器通过输入的字符流来识别特定的语言结构。词法规则以大写字母开头文法规则以小写字母开头。例如,ID是一个词法规则名,而expr是一 个文法规则名。2.配置标识符在语法的伪代码中,一个基本的标识符就是一个由大小写字母组成的字符序列。我们知道,可以使用刚刚掌握的方法(...) +来表达序列模式。因为序列中的元素既可以是大写字母也可以是小写字母.我们还知道,应当在子规则中使用选择运算符:ID : ('a'..'z'|'A'..'.原创 2020-06-29 22:28:03 · 767 阅读 · 0 评论 -
【Antlr】Antlr语法设计
1.概述写Antlr语法就是自顶向下、先全局后细节的过程。先找到最大的语法框架,然后逐步细节的去描述它。设计起始规则的内容实际上就是使用“英语伪代码”来描述输入文本的整体结构,这和我们编写软件的过程有点类似。例如,“- 个CSV文件就是一系列以换行符为终止的行。”(a comma-separated- value[CSVfile is a sequence of rows terminated by newlines.)其中,isa左侧的单词file就是规则名,右侧的全部内容就是规则定义中的.原创 2020-06-27 17:13:39 · 794 阅读 · 0 评论 -
【Antlr】Antlr重写输入流
1.概述接下来,让我们构建一个小工具,它能够修改Java源代码并插入java.io.Serializable使用的序列化版本标识符(serialVersionUID, 类似Eclipse的自动生成功能)。我们不希望小题大做,仅仅为了这样- -件小事(读取输入,稍事修改后输出)就把ANTLR根据Java语法生成的JavaL istener接口中的方法全部实现。更简单的做法是,在原先的词法符号流中插入一个适当的代表常量字段的词法符号,然后打印出修改后的输入流。对症下药,才能事半功倍。我们的ma.原创 2020-07-01 17:56:03 · 722 阅读 · 0 评论 -
【Antlr】WHITESPACE is not a recognized channel name
1.背景antlr4 权威指南中的文件 ,第十二章/** Simple statically-typed programming language with functions and variables * taken from "Language Implementation Patterns" book. */grammar Cymbol;@lexer::members { public static final int WHITESPACE = 1; public .原创 2020-07-01 17:55:22 · 859 阅读 · 0 评论 -
【Antlr】rule expr: must label all alternatives or none
1.背景写了一个antlr 语法文件 ,如下 报错grammar FunctionGrammar;root : stat+;stat :expr ';' #printExpr |ID '(' ')' ';' #assign ;expr : ID '(' ')' | INT # int ;// ID是标识符ID : [a-zA-Z]+ ;// INT 是整数 必须是IDINT : [0-.原创 2020-07-01 17:55:14 · 1200 阅读 · 0 评论 -
【Antlr】cannot create implicit token for string literal in non-combined grammar xx
写了一个g4文件,然后编译的时候报错这里是因为我定义了两个一样的修改一下就好了不能在非组合语法中为字符串文字创建隐式标记。原创 2020-07-01 17:55:06 · 1396 阅读 · 0 评论 -
【antlr】 Could not deserialize ATN with UUID 无效
spark antlr解析SQL报错如下。原创 2019-08-10 15:44:25 · 2826 阅读 · 1 评论 -
BNF范式
BNF范式原创 2018-12-17 14:36:39 · 3050 阅读 · 0 评论 -
【Antlr】ANTLR语法规则
ANTLR语法规则的主要工作是定义词法解析规则和语法解析规则。ANTLR约定词法解析规则以大写字母开头,语法解析规则以小写字母开头。下面简单介绍一下ANTLR的规则。首先需要定义Grammar类型及名称,名称必须和文件名一样。有Lexer、Parser、Tree和Combine这4种语法类型。Lexer定义词法分析规则;Parser 定义语法分析规则;Tree用于遍历语法分析树;Comb...原创 2018-12-17 14:36:13 · 3386 阅读 · 0 评论 -
ANTLR-语法树遍历机制
文章目录1. 简介2. 主动遍历与被动遍历3.Listener模式3.1 使用示例3.2 原理解析4.Visitor模式4.1 使用示例4.2 原理解析5.规则文件与Visitor对应关系1. 简介2. 主动遍历与被动遍历ParseTreeListener 与 ParseTreeVisitor区别ParseTreeListener是被动遍历,ParseTreeVisitor是主动遍历ParseTreeListener需要与antlr遍历类ParseTreeWalker一起使用Antlr提供原创 2018-12-17 11:19:20 · 2932 阅读 · 0 评论 -
【工具】IDEA下ANTLR Preview的使用
输入一个语句你想解析的语句放进去,发现没什么卵用,此时打开。(这个是可变的),然后会发现生成了树。点击一个黄色的标签,然后右键,如何查看树形结构呢?原创 2018-12-14 21:39:35 · 4042 阅读 · 0 评论 -
【Antlr】在IDEA中安装使用Antlr
IDEA插件地址http://plugins.jetbrains.com/plugin/7358-antlr-v4-grammar-plugin。配置完成后右键文件 -> Generate ANNTLR Recognizer,可以看到生成一堆文件。的时候,使用的是4.7生成的,但是运行却是4.6。的时候,使用的是4.6生成的,但是运行却是4.5。装1.8.4版本,可以看到这里支持。装1.8版本,可以看到这里支持。装1.6版本,可以看到这里支持。最后经过测试,原来是。最后经过测试,原来是。原创 2018-06-26 14:19:14 · 8178 阅读 · 2 评论 -
antlr4做一个计算器
2.建立G4文件内容建立测试文件内容建立主文件建立数据测试文件最后要加上一个换行运行主文件,结果参考:https://blog.csdn.net/zjq_1314520/article/details/65938532。原创 2018-06-29 23:35:26 · 1917 阅读 · 2 评论 -
mac下antlr4命令使用
1.下载lcc@lcc hellow$ cd /usr/local/lib/lcc@lcc hellow$ curl -O http://www.antlr.org/download/antlr-4.0-complete.jar可以看到该目录下出现一个jar包-rw-r--r-- 1 lcc staff 0 6 29 16:18 antlr-4.0-compl...原创 2018-06-29 16:34:55 · 2397 阅读 · 2 评论