写点什么

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

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

关注

评论

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

极狐GitLab Helm Chart 已上线,玩转云原生极狐GitLab!

极狐GitLab

深入理解左倾红黑树 | 京东物流技术团队

京东科技开发者

测试开发 | 神经网络架构与设计:探索人工智能的大脑

测吧(北京)科技有限公司

测试

如何评估 RAG 应用的质量?最典型的方法论和评估工具都在这里了

Zilliz

评估 AIGC LLM rag

全国范围AOI数据2023年12月更新,共计超过234.5万个(AOI数据更新系列)

Geek_f9782a

shopee虾皮商品详情数据接口(Shopee.item_get)丨shopee虾皮API接口

tbapi

shopee商品详情数据接口 shopee API 虾皮shopee详情数据接口 虾皮商品详情数据接口

IPQ9574 and QCN9274: Explore the WiFi7 MLO feature Test with Wallys DR9274

wallyslilly

qcn9274 ipq9574

TuGraph Analytics交互式图查询:让图所见即所得

TuGraphAnalytics

图分析 图查询 图可视化

苹果市值一夜蒸发 1071 亿美元;「团结引擎创世版」发布丨 RTE 开发者日报 Vol.118

声网

Allins 官网正式上线,铭文赛道进入 AMM 交易时代

西柚子

低代码平台在自动驾驶系统开发中的应用

不在线第一只蜗牛

自动驾驶 低代码 交通

什么是DePIN,2024年需要了解的DePIN项目

TechubNews

区块链 DePIN

低代码技术:颠覆数据孤岛的技术利器

快乐非自愿限量之名

数据 低代码 数据孤岛

Allins 官网正式上线,铭文赛道进入 AMM 交易时代

小哈区块

【JAVA】AI医疗智能导诊系统源码

源码星辰

Java 源码 智能导诊

实施管家式运维:为企业打造 定制化IT支持体系

太乙闲人

调试技巧 | AI工程化部署

AIWeker

c AI AI工程化部署

监督学习算法详解:模型训练、分类与预测

测吧(北京)科技有限公司

测试

语音AI小夜灯项目

芯动大师

Allins 官网上线,标志铭文赛道正式进入 AMM 交易时代

BlockChain先知

Mycat分库分表实时同步到GreatSQL

GreatSQL

数据迁移 greatsql

软件测试/测试开发丨Web端测试—CSS讲解 学习笔记

测试人

软件测试

Allins 官网正式上线,铭文赛道进入 AMM 交易时代

石头财经

测试开发 | 数据挖掘在人工智能中的作用:洞察、预测与创新

测吧(北京)科技有限公司

测试

Allins 官网正式上线,铭文赛道进入 AMM 交易时代

股市老人

解读 $mash 通证 “Fair Launch” 规则,将公平发挥极致

股市老人

测试开发 | 从原理到实战,四天带你轻松进阶Python

测吧(北京)科技有限公司

测试

测试开发 | 无监督学习与聚类算法:数据中的潜在结构解析

测吧(北京)科技有限公司

测试

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