Sha256: a65c85b8c4ed057c828611bae4168290c7fceb4a72c13aa00615588a0411efc0
Contents?: true
Size: 1.03 KB
Versions: 3
Compression:
Stored size: 1.03 KB
Contents
# basic parser that accepts only legal JSON # parse-tree-nodes support "#evaluate" which returns the ruby-equivalent data-structure require "babel_bridge" class JsonParser < BabelBridge::Parser ignore_whitespace rule :document, any(:object, :array) rule :array, '[', many?(:value, ','), ']' do def evaluate; value.collect {|v| v.evaluate} end end rule :object, '{', many?(:pair, ','), '}' do def evaluate; Hash[ pair.collect {|p| p.evaluate } ] end end rule :pair, :string, ':', :value do def evaluate; [ eval(string.to_s), value.evaluate ] end end rule :value, any(:object, :array, :ruby_compatible_literal, :null) rule :ruby_compatible_literal, any(:number, :string, :true, :false) do def evaluate; eval(to_s); end end rule :string, /"(?:[^"\\]|\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4}))*"/ rule :number, /-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?/ rule :true, "true" rule :false, "false" rule :null, "null" do def evaluate; nil end end end BabelBridge::Shell.new(JsonParser.new).start
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
babel_bridge-0.5.5 | examples/json/json_parser2.rb |
babel_bridge-0.5.4 | examples/json/json_parser2.rb |
babel_bridge-0.5.3 | examples/json/json_parser2.rb |