NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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:171578
用户头像

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

关注

评论

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

2021Java不死我不倒,Java架构师之路

Java 面试 后端

【回顾】上汽零束SOA开发者大会,开发者提问汇总!

SOA开发者平台

开发者 SOA 软件定义汽车

2021Java春招面试经历,含泪狂刷Java基础面试118题

Java 面试 后端

2021Java大厂面试题来袭,Java工程师进阶书籍

Java 面试 后端

2021Java网络编程总结篇,三年老Java经验面经

Java 面试 后端

2021Java高级进阶学习资料,StringBoot编程式事务与声明式事务

Java 面试 后端

科创人|华映资本章高男:好奇心顽童,趋势焦虑者,反套路投资人

科创人

个推融合实人认证服务和视觉智能技术,推出青少年网络游戏防沉迷解决方案

个推

AI 人脸识别

2021Java者未来的出路在哪里,怒斩获了30家互联网公司offer

Java 面试 后端

如何用人工智能技术优化 WebRTC 产品(内附具体方案)

融云 RongCloud

2021Java精选面试实战总结整理,Java程序员面试算法宝典

Java 面试 后端

全面公开!阿里P6-P8技术团队共同携手编写的“大厂面试参考指南”v1.0版本,挑战全网

Java 编程语言 java架构 Java工程师

2020-2021阿里巴巴Java面试真题解析,Java程序员必备书籍

Java 面试 后端

Linux用户权限切换

在即

9月日更

2021Java开发现状分析,Java中级笔试题百度文库

Java 面试 后端

【回顾】上汽零束SOA开发者大会,开发者提问汇总!

SOA开发者

软件 SOA 汽车 软件定义汽车 OTA

科创人|华傲数据CEO贾西贝:梦想驱动的九个人生抉择

科创人

2021Java面试心得,淘汰机制、缓存雪崩

Java 后端

2021Java大厂面试真题,Java这些高端技术只有你还不知道

Java 面试 后端

2021Java开发学习路线,阿里Java校招面试

Java 面试 后端

个推Spark性能调优实战分享:性能提升60%↑ 成本降低50%↓

个推

大数据 spark Spark调优

2021Java最新大厂面试真题总结,入职阿里啦

Java 面试 后端

百亿级日志流分析实践 | 剖析个推SDK后效分析功能实现原理

个推

消息推送 sdk

2021Java不死我不倒,细数Java开发者的艰辛历程

Java 面试 后端

2021Java最新大厂面试真题,37岁程序员被裁

Java 面试 后端

Jenkins: 重置管理员密码

DisonTangor

jenkins

2021Java面试心得,Spring的XML解析原理

Java 面试 后端

2021Java最新大厂面试真题,Java面试宝典pdf

Java 面试 后端

M-SQL:超强的多任务表示学习方法

华为云开发者联盟

sql 自然语言 M-SQL SQL语句 多任务

2021Java进阶者的新篇章,做了5年Java

Java 面试 后端

阿里淘技术带佬新作:设计模式的完美演绎,共计1290页

Java 程序员 架构 面试 计算机

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