在 ruby​​ ripper 解析期间检测错误

发布于 2024-12-08 20:11:09 字数 290 浏览 1 评论 0原文

有谁知道当向 Ruby 的 ripper 库提供格式错误的输入时如何检测错误?

ruby-1.9.2-p180 :002 > Ripper.sexp("array[1 2]")
 => [:program, [:@int, "2", [1, 8]]] 
ruby-1.9.2-p180 :003 >

我稍微研究了一下源代码,发现了 #compile_error、#warning、#warn 和 #yydebug,但尚不清楚如何让这些方法发挥作用。毫无疑问,这里有一些简单的答案。

Has anyone figured out how to detect errors when malformed input is given to Ruby's ripper library?

ruby-1.9.2-p180 :002 > Ripper.sexp("array[1 2]")
 => [:program, [:@int, "2", [1, 8]]] 
ruby-1.9.2-p180 :003 >

I've poked around the sources a little and discovered #compile_error, #warning, #warn, and #yydebug, but it's not yet clear how to get any of these methods to work. No doubt there's some simple answer here.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

小耗子 2024-12-15 20:11:09

我想我在某处读到,ruby ripper 扩展仍在活跃开发中,所以如果没有人抽出时间来连接 #compile_error、#warning 或 #warn,我不会感到惊讶。

Ripper#yydebug 在 Ruby 1.9.3 中工作,它可能在 1.9.2 中工作,我只是做错了什么。但它打印出调试信息,其中只有一小部分与错误相关。

这是检测错误的一种直接方法:

require 'ripper'
require 'pp'

class SexpBuilderPP < Ripper::SexpBuilderPP
  def on_parse_error(*)
    raise "parse error!"
  end
end

while input = $stdin.gets
  pp SexpBuilderPP.new(input).parse
end

有几个事件的名称中包含“error”:on_alias_error、on_assign_error、on_class_name_error、on_param_error 和 on_parse_error。

I think I read somewhere that the ruby ripper extension is still under active development, so I wouldn't be surprised if no one has gotten around to wiring up #compile_error, #warning or #warn yet.

Ripper#yydebug works in Ruby 1.9.3, and it might work in 1.9.2 and I was just doing something wrong. But it prints out debugging information, only a little of which will be related to an error.

This is one straightforward way to detect errors:

require 'ripper'
require 'pp'

class SexpBuilderPP < Ripper::SexpBuilderPP
  def on_parse_error(*)
    raise "parse error!"
  end
end

while input = $stdin.gets
  pp SexpBuilderPP.new(input).parse
end

There are several events that contain "error" in the name: on_alias_error, on_assign_error, on_class_name_error, on_param_error and on_parse_error.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文