package JBD::JSON;
# ABSTRACT: provides JSON parsing subs
our $VERSION = '0.04'; # VERSION
# JSON parsing subs.
# @author Joel Dalley
# @version 2014/Mar/22
use JBD::Core::Exporter ':omni';
use JBD
ser::DSL;
use JBD::JSON::Lexers;
use JBD::JSON::Grammar;
use JBD::JSON::Transformers 'remove_novalue';
# @param string $parser A JBD::Parser sub name.
# @param scalar/ref $text JSON text.
# @return a
t json_array => \&remove_novalue,
json_object => \&remove_novalue;
my $st = parser_state tokens $text, [
JsonNum, JsonQuote, JsonComma,
JsonColon, JsonC
package JBD::JSON::Lexers;
# ABSTRACT: JSON lexers
our $VERSION = '0.04'; # VERSION
# JSON Lexers.
# @author Joel Dalley
# @version 2014/Mar/22
use JBD::Core::Exporter;
use JBD::Parser::DSL;
our @E
XPORT = qw(
JsonSpace JsonNum JsonNull JsonBool
JsonSquareBracket JsonCurlyBrace
JsonColon JsonComma JsonQuote JsonStringChar
JsonEscapeSeq UnicodeEscapeSeq JsonEscapeChar
);
|| hex "0x$1" < 0
|| hex "0x$1" > 0x001F; $1;
}, 'UnicodeEscapeSeq';
}
sub JsonEscapeChar {
bless sub {
my $chars = shift;
return unless length $chars;
ckage JBD::JSON::Grammar;
# ABSTRACT: a JSON grammar
our $VERSION = '0.04'; # VERSION
# A JSON grammar.
# @author Joel Dalley
# @version 2014/Mar/18
use JBD::Core::Exporter;
use JBD::JSON::Transfor
'reduce_JsonString';
use JBD::JSON::Lexers;
use JBD::Parser::DSL;
our @EXPORT = qw(
init json_space
json_member_list json_element_list
json_bool_literal json_null_literal
json_escape_
char json_escape_seq
json_string_char star_string_char
json_member json_object json_string
json_array json_value json_text
);
#///////////////////////////////////////////////////////
package JBD::JSON::Transformers;
# ABSTRACT: JSON parser token transformers
our $VERSION = '0.04'; # VERSION
# JSON parser token transformers.
# @author Joel Dalley
# @version 2014/Mar/22
use JBD::C
ore::Exporter ':omni';
use JBD::Parser::DSL;
use JBD::JSON::Lexers;
# @param arrayref Array of JBD::Parser::Tokens.
# @return arrayref Same array, minus Nothing-type tokens.
sub remove_novalue {
::Parser::Tokens.
# @return arrayref A single JsonString-typed token array.
sub reduce_JsonString {
my $tokens = remove_novalue shift;
[token 'JsonString', join '', map $_->value, @$tokens];
}
re>.
The JBD namespace also contains lexing, parsing and grammar tools.
For JSON tokenizing and parsing, see L<JBD::JSON>.
For general parsing tools, see L<JBD::Parser>.
=head1 AUTHOR
Joel Dalley
:JSON 'std_parse';
# Optionally specify a single json_corpus file to test.
# If no argument, then all inline & corpus tests run.
my $file = shift;
# Inline tests.
my @cfg = $file ? () : (
[json_
space => ' '],
[json_escape_seq => '\\"'],
[json_null_literal => 'null'],
[json_bool_literal => 'true'],
[json_bool_literal => 'false'],
[json_string_char => 'chars'],
[json_string => qq|"This. Is\na string?\r\f"|],
[json_member_list => '"nada":null'],
[json_element_list => 'true, false, null, 1, 2'],
[json_array => '[1, 2]'],
[json_m