加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

用 Ruby 进行简单的 lisp 表达式的解析

发布时间:2020-12-17 04:07:40 所属栏目:百科 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 def parse(line) s = line.scan(/(|)|"(?:.|[^"])*"|[^()" n]+/) f = -(t=nil){ case x = t || s.shift when ?( y = [] while x = s.shift retur

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

def parse(line)
  s = line.scan(/(|)|"(?:.|[^"])*"|[^()" n]+/)
  f = ->(t=nil){
    case x = t || s.shift
    when ?(
      y = []
      while x = s.shift
        return y if x==?)
        y << f[x]
      end
      fail ")?"
    when nil
      nil
    when /^#(.*)$/
      {?t=>true,?f=>false}[$~[1]]
    when /d+/
      x.to_i
    when /^"(.*)"$/m
      $~[1].gsub(/./,'n'=>"n","\"=>"","""=>'"')
    else
      x.to_sym
    end
  }
  f[]
end

$tests = {
  "" => nil,"1" => 1,"(a b)" => [:a,:b],"(1 2(2 3))" => [1,2,[2,3]],'(a"b"c"d"(ef))' => [:a,"b",:c,"d",[:ef]],'("a b" (c d-e))' => ["a b",[:c,:"d-e"]],"("anb"nbnc (d))" => ["anb",:b,[:d]],' "anb"' => "anb",'"a"b"'=>'a"b',""\""=> "","(#t #f)" => [true,false],"(define (f x) (if (zero? x) 0 (+ x (f (- x 1)))))" =>
    [:define,[:f,:x],[:if,[:zero?,[:+,:x,[:-,1]]]]],}

p $tests.all?{|x,y|parse(x)==y}

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读