首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将手写分析器转换为ANTLR

将手写分析器转换为ANTLR
EN

Stack Overflow用户
提问于 2015-03-24 09:02:27
回答 1查看 182关注 0票数 1

我目前正在开发一种编程语言,大约9个月来,我一直在使用手写的lexer和解析器。我现在要做的是将其转换为ANTLR解析器。编译器解析器系统的结构大致如下所示:

  1. 将输入流转换为双链接令牌列表(由lexer完成)。
  2. 设置一些具有变量currentParser并可以执行reparse()skip(n tokens)等操作的帮助程序
  3. 使用Parser的特定子类开始解析(使用parse(ParserManager pm, Token token)方法)
  4. 根据当前令牌,当前解析器可能会在解析器堆栈上push一个new Parser,或者从解析器堆栈中弹出自己,这意味着堆栈中的下一个解析器将解析下一个令牌。
  5. 整个编译器构建在像ITypeList这样的接口上,这些接口也作为单个参数传递给解析器。

Parser子类的一个例子是TypeParser

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public TypeParser(ITyped typed) { ... }

TypeListParser

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public TypeListParser(ITypeList typeList) { ... }

这个简单的结构适用于每个Parser实现。在ANTLR中有使用这些接口的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-24 22:32:16

您的描述看起来像是Parser combinator模式的变体。

若要将这种设计转换为反To:

  • 将令牌映射到ANTLR令牌。这相当容易,因为ANTLR-令牌和您的令牌的接口是相似的。它们可能会被包装或映射。
  • 将每个解析器子类映射到一个ANTLR解析规则(或多个规则)。您将需要此解析器中的操作和语义谓词,因为解析器并不仅由语法驱动。
  • ANTLR4不创建AST,因此可以完全回收AST节点,您只需决定如何从语法创建AST:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1. to create the AST as part of the grammar (actions), this is efficient, but makes your grammar heavily dependent on AST-Classes and Implementation language
2. to create the AST in a second pass with a parse tree visitor, this decouples parsing and AST construction but an intermediate parse tree is build, which costs some time.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29238671

复制
相关文章
将tensor转换为图像_tensor转int
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/07
11.5K0
Antlr4实战:统一SQL路由多引擎
ANTLR是一款功能强大的语法分析器生成器,可用来读取、处理、执行和转换结构化文本或二进制文件。它被广泛应用于学术界和工业界构建各种语言、工具和框架。Antlr在Hadoop整个生态系统应用较为广泛,如Hive 词法文件是Antlr3写的;Presto词法文件也Antlr4实现的;SparkSQL词法文件是用Presto的词法文件改写的;还有HBase的访问客户端Phoenix也用Antlr工具进行SQL解析的等等。
用户7600169
2022/04/25
10K1
Antlr4实战:统一SQL路由多引擎
java map 转string_java-将Map <String,Object>转换为Map <String,String>
Map map = new HashMap(); //Object is containing String
全栈程序员站长
2022/08/25
12.3K0
手写一个词法分析器
最近大部分时间都在撸 Python,其中也会涉及到将数据库表转换为 Python 中 ORM 框架的 Model,但我们并没有找到一个合适的工具来做这个意义不大的”体力活“,所以每次新建表后大家都是根据自己的表结构手写一遍 Model。
crossoverJie
2022/10/27
3690
手写一个词法分析器
Antlr实战之JSON解析器slowjson
最近一直在学习编译原理,然后就了解到了antlr4这个强大的工具,antlr的全称是(Another Tool for Language Recognition),是一款很强大的词法和语法分析工具,虽然是用java写成的,但它也能生成c++、go……等语言的代码。它的主要作用就是你可以用巴科斯范式来描述语法规则,然后它帮你生成对应的解析器。
xindoo
2021/01/22
1.4K0
Antlr实战之JSON解析器slowjson
antlr4入门篇
ANTLR实际上有两件事:一种将您的语法转换为Java(或其他目标语言)的解析器/词法分析器的工具,以及生成的解析器/词法分析器所需的运行时。即使您使用ANTLR Intellij插件或ANTLRWorks来运行ANTLR工具,生成的代码仍将需要运行时库。
山行AI
2020/08/18
4.4K0
antlr4入门篇
几百行代码实现一个脚本解释器
最近又在重新学习编译原理了,其实两年前也复习过,当初是为了能实现通过 MySQL 的 DDL 生成 Python 中 sqlalchemy 的 model。
crossoverJie
2022/10/27
5820
几百行代码实现一个脚本解释器
打破国外垄断,开发中国人自己的编程语言(1):编写解析表达式的计算器
本文是《打破国外垄断,开发中国人自己的编程语言》系列文章的第1篇。本系列文章的主要目的是教大家学会如何从零开始设计一种编程语言(marvel语言),并使用marvel语言开发一些真实的项目,如移动App、Web应用等。marvel语言可以通过下面3种方式运行:
蒙娜丽宁
2020/07/30
2.4K1
打破国外垄断,开发中国人自己的编程语言(1):编写解析表达式的计算器
java将字符串转换为json对象的方法_java jsonobject转string
在与服务器交互的时候,我们往往会使用json字符串,今天的例子是java对象转化为字符串,
全栈程序员站长
2022/11/08
21.3K0
将字符串转换为date类型_java字符串转date类型
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
14.2K0
将KITTI转换为PASCAL VOC
import os, sysimport globfrom PIL import Image # VEDAI 图像存储位置src_img_dir = "D:\dataset\cityscapes\leftImg8bit\\train\\zurich\\"# VEDAI 图像的 ground truth 的 txt 文件存放位置src_txt_dir = "D:\dataset\cityscapes\gtFine\\train\\zurich\\"src_xml_dir = "D:\dataset\citys
狼啸风云
2020/07/14
7340
python 将图片转换为txt
matinal
2023/10/13
3240
python 将图片转换为txt
Spark SQL源码研读系列01:ParseTree
ANTLR是Another Tool for Language Recognition的缩写。
百万大虾
2022/11/08
1.2K0
将Windows日志转换为Syslog
无论是Unix、Linux、FreeBSD、Ubuntu,还是路由器、交换机,都会产生大量的日志,而这些,一般会以syslog的形式存在。在RFC 3164中定义了syslog是一种日志协议,syslog数据包的大小为1024字节,包含Facility, Severity, Hostname, Timestamp和Message信息。syslog服务器默认使用UDP 514号端口。简单的说,syslog可以告诉管理员:谁(Facility),什么时间(Timestamp),什么地方(Hostname)做了什
张善友
2018/01/29
5K0
浅尝antlr4
这次使用antlr的诱因是whosbug中使用的ctags(另一个语法分析器)只对c系语言支持较好,对java等语言的支持欠佳(甚至可以说很差了),为了whosbug的鲁棒性我认为还是有必要换一个语法分析器的
Kevinello
2022/08/19
1.8K0
浅尝antlr4
Hive源码系列(六)编译模块之词法、语法解析 (上)
词法、语法解析模块会先介绍一下antlr环境(上)。然后举实际案例说明怎么使用antlr工具、利用antlr生成的Lexer、Parser、TreeParser代码,获取asttree。这些都是hive获取asttree的过程,理解了这些,再理解hive的asttree就很容易了(中)。 最后 详细介绍hive词法、语法解析的源码 以及hive AstTree的使用 (下)
数据仓库践行者
2020/04/18
1.2K0
用 Antlr 重构脚本解释器
在上一个版本实现的脚本解释器 GScript 中实现了基本的四则运算以及 AST 的生成。
crossoverJie
2022/10/27
7900
用 Antlr 重构脚本解释器
string转换为jsonarray_jsonobject转jsonarray
如果用的是fastjson 则导包为 import com.alibaba.fastjson.JSONObject
全栈程序员站长
2022/09/22
1.9K0
string转换为jsonarray_jsonobject转jsonarray
使用Python将PDF转换为Excel
在本文中,我们将了解如何使用Python将PDF转换为Excel。如果你处理数据,那么很可能已经或将不得不处理存储在.pdf文件中的数据。从PDF复制表格并将其直接粘贴到Excel是很困难的,在大多数情况下,我们从PDF文件中复制的是文本,而不是格式化的Excel表格。因此,当将数据粘贴到Excel中时,我们会看到一块文本被压缩到一个单元格中。
fanjy
2022/03/07
3.9K0
使用Python将PDF转换为Excel
点击加载更多

相似问题

将语法从Antlr2转换为Antlr4后输入不匹配

10

Antlr词法分析器输出

10

将手写数字转换为文本

39

仅从Antlr生成词法分析器

20

ANTLR词法分析器子串

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文