写点什么

Treetop——基于 Ruby 的 PEG 解析器生成器

  • 2008-01-22
  • 本文字数:1041 字

    阅读完需:约 3 分钟

Ruby 已经有了一个叫做 RACC 的解析器生成器,是一个 YACC 的移植版本(被用来编写ruby_parser,第一个用Ruby 写成的Ruby 解析器)。

当谈到解析器生成器的时候,解析表达式语法(PEG)最近因为一篇 Bryan Ford 介绍的一种叫做“Packrat 解析”优化的论文而 变得很流行。Packrat 解析解决了诸如指数级解析时间的问题。这是由于解析器使用回溯来解析代码,例如,它们会尝试诸多结果的组合直到找到正确的那一 个。Packrat 解析的解决方法是使用记忆化,例如将解析的中间结果保存下来,而不是一遍一遍的重新计算。这决定了 Packrat 解析的时间复杂度是线 性的,但是缺点是需要很大的内存,通常是源代码大小的几倍。注意,其他的解析器生成器也是采用类似的方法,比如 ANTLR

基于这个前提, Treetop 网站上如此解释 PEG 的优点:

解析表达式语法(PEGs)编写简单、易于维护。它们是简单但功能强大的泛化正则表达式,比起传统的 LALR 或者 LR-1 语法的解析器生成器来说更易于使用。没有必要再进行符号化解析,或者用于有限度上下文敏感的前向断言。

Treetop 会自动生成解析树,而且还允许用户添加方法来定制所生成的节点:
grammar Arithmetic<br></br> rule additive<br></br>  multitive '+' additive {<br></br>  def value<br></br>  multitive.value + additive.value<br></br>  end<br></br>  }<br></br> /<br></br>  multitive<br></br> end<br></br># other rules below ... <br></br>end 这段代码的意思是通过 additive 节点生成的节点有一个叫做 value 的方法。另外,可以为每条规则指定一个要生成的节点类。(注意:这个斜杠是选择操作符,意思是,additive 规则要么是两个操作数和之间的加号,要么是 multitive 规则的结果)。 在开始使用 Treetop 之前,你需要先安装它。可以从Rubyforge 下载Treetop 的源代码,或者通过gem 安装,命令为:

gem install treetop 想要开始使用它的话,可以去查看Treetop 的文档或者看看上文中的示例。Treetop 需要一个简单的算术表达式解析器、一个非常基本的语言解析器以及运行时间。

Treetop 可以通过 tt 工具将语法定义文件转换成 Ruby 代码: <span>tt foo.treetop</span> 另一种选择是通过 Ruby 代码来进行解析器生成
Treetop.load "arithmetic"<br></br>parser = ArithmeticParser.new<br></br><span color="#000000">parser.parse('1+1') </span> Treeop 创始人的现场演示,参见 Nathan Sobo 在 RubyConf 2007 上关于 Treetop 的报告
查看英文原文: Treetop - PEG parser generator for Ruby

2008-01-22 01:171921
用户头像

发布了 80 篇内容, 共 21.8 次阅读, 收获喜欢 5 次。

关注

评论

发布
暂无评论
发现更多内容

京东商品详情API接口指南(Python篇)

tbapi

京东API接口 京东商品详情接口

RabbitMQ 可观测性最佳实践

观测云

RabbitMQ

分享一次面试经历

王中阳Go

面试

MSE Nacos 2.3.2.0 发布,性能最多提升三倍,支持操作审计等安全特性

阿里巴巴云原生

阿里云 云原生

承载AI的云南花卉,正在盛开

脑极体

AI

JVM实战—OOM的生产案例

不在线第一只蜗牛

JVM

小红书API接口深度解析:如何高效获取笔记详情数据并附简短代码示例

代码忍者

小红书API接口

焱融全闪 F9000X 性能再创新高,全面释放大规模 AI 计算效能

焱融科技

人工智能 大模型 智算中心 全闪存储

研发效能中的AI度量与度量AI

思码逸研发效能

研发效能 研发效能度量 AI辅助 思码逸

英伟达世界基础模型 Cosmos,教 AI 理解物理世界;阿里通义与雷鸟合作推出 AI 眼镜丨 RTE 开发者日报

声网

10 分钟打造你的专属 AI 客服

阿里巴巴云原生

阿里云 云原生

​未来智能携讯飞AI会议耳机亮相CES 将以“viaim”品牌进军北美市场

科技热闻

速卖通API接口深度解析:商品详情获取与关键词搜索商品实战指南

代码忍者

速卖通API接口

基于LangChain手工测试用例生成工具

测试人

软件测试

亚马逊API接口深度解析:商品详情获取与关键词搜索商品实战指南

代码忍者

亚马逊商品详情API

枫清科技高雪峰: Data-Centric新范式开启,知识引擎+大模型双轮驱动企业智能化

Fabarta

#人工智能 #大模型 生成式 AI 应用 企业 AI 应用 大模型应用

AutoGen入门-让两个AI自行聊天完成任务

不在线第一只蜗牛

人工智能 AI

京东商品评论数据接口(JD.item_review)京东 API 接口指南

联讯数据

数据服务 | 新一代财务共享从流程优化到数据赋能的转型之旅

用友智能财务

业务 财务 财会

基于 Flink 进行增量批计算的探索与实践

Apache Flink

大数据 flink 批计算

什么是AI Agent?——最简单的解释

TechubNews

#人工智能

年末福利:距离 KaiwuDB 官方认证,仅差一步之遥!

KaiwuDB

数据库认证

Treetop——基于Ruby的PEG解析器生成器_Ruby_Werner Schuster_InfoQ精选文章