用 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】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |