Skip to content

Instantly share code, notes, and snippets.

@rns
Last active August 29, 2015 14:07
Show Gist options
  • Save rns/916bbdc8d87bf9dc3f4e to your computer and use it in GitHub Desktop.
Save rns/916bbdc8d87bf9dc3f4e to your computer and use it in GitHub Desktop.
\[
'data',
[
'heading',
[
'string',
'Soccer'
]
],
[
'tables',
[
'table',
[
'level1',
'+'
],
[
'name',
[
'string',
'Team'
]
],
[
'value',
[
'string',
'US'
]
],
[
'rows',
[
'row',
[
'level2',
'++'
],
[
'name',
[
'string',
'Shirt'
]
],
[
'value',
[
'string',
'Red & White Stripes'
]
]
],
[
'row',
[
'level2',
'++'
],
[
'name',
[
'string',
'Shorts'
]
],
[
'value',
[
'string',
'Blue'
]
]
],
[
'row',
[
'level2',
'++'
],
[
'name',
[
'string',
'Players'
]
],
[
'value',
[
'number',
'17'
]
]
],
[
'row',
[
'level3',
'+++'
],
[
'name',
[
'string',
'Active'
]
],
[
'value',
[
'number',
'11'
]
]
],
[
'row',
[
'level4',
'++++'
],
[
'name',
[
'string',
'Forward'
]
],
[
'value',
[
'number',
'2'
]
]
],
[
'row',
[
'level4',
'++++'
],
[
'name',
[
'string',
'Midfield'
]
],
[
'value',
[
'number',
'4'
]
]
],
[
'row',
[
'level4',
'++++'
],
[
'name',
[
'string',
'Defense'
]
],
[
'value',
[
'number',
'4'
]
]
],
[
'row',
[
'level4',
'++++'
],
[
'name',
[
'string',
'Goalkeeper'
]
],
[
'value',
[
'number',
'1'
]
]
],
[
'row',
[
'level3',
'+++'
],
[
'name',
[
'string',
'Substitute'
]
],
[
'value',
[
'number',
'6'
]
]
],
[
'row',
[
'level4',
'++++'
],
[
'name',
[
'string',
'Forward'
]
],
[
'value',
[
'number',
'1'
]
]
],
[
'row',
[
'level4',
'++++'
],
[
'name',
[
'string',
'Midfied'
]
],
[
'value',
[
'number',
'2'
]
]
],
[
'row',
[
'level4',
'++++'
],
[
'name',
[
'string',
'Defense'
]
],
[
'value',
[
'number',
'3'
]
]
],
[
'row',
[
'level4',
'++++'
],
[
'name',
[
'string',
'Goalkeeper'
]
],
[
'value'
]
]
]
],
[
'table',
[
'level1',
'+'
],
[
'name',
[
'string',
'Team'
]
],
[
'value',
[
'string',
'Mexico'
]
],
[
'rows',
[
'row',
[
'level2',
'++'
],
[
'name',
[
'string',
'Shirt'
]
],
[
'value',
[
'string',
'Green'
]
]
],
[
'row',
[
'level2',
'++'
],
[
'name',
[
'string',
'Shorts'
]
],
[
'value',
[
'string',
'White'
]
]
],
[
'row',
[
'level2',
'++'
],
[
'name',
[
'string',
'Players'
]
],
[
'value',
[
'number',
'17'
]
]
],
[
'row',
[
'level3',
'+++'
],
[
'name',
[
'string',
'Active'
]
],
[
'value',
[
'number',
'11'
]
]
],
[
'row',
[
'level4',
'++++'
],
[
'name',
[
'string',
'Forward'
]
],
[
'value',
[
'number',
'3'
]
]
],
[
'row',
[
'level4',
'++++'
],
[
'name',
[
'string',
'Midfield'
]
],
[
'value',
[
'number',
'3'
]
]
],
[
'row',
[
'level4',
'++++'
],
[
'name',
[
'string',
'Defense'
]
],
[
'value',
[
'number',
'4'
]
]
],
[
'row',
[
'level4',
'++++'
],
[
'name',
[
'string',
'Goalkeeper'
]
],
[
'value',
[
'number',
'1'
]
]
],
[
'row',
[
'level3',
'+++'
],
[
'name',
[
'string',
'Substitute'
]
],
[
'value',
[
'number',
'6'
]
]
],
[
'row',
[
'level4',
'++++'
],
[
'name',
[
'string',
'Forward'
]
],
[
'value',
[
'number',
'2'
]
]
],
[
'row',
[
'level4',
'++++'
],
[
'name',
[
'string',
'Midfield'
]
],
[
'value',
[
'number',
'1'
]
]
],
[
'row',
[
'level4',
'++++'
],
[
'name',
[
'string',
'Defense'
]
],
[
'value',
[
'number',
'2'
]
]
],
[
'row',
[
'level4',
'++++'
],
[
'name',
[
'string',
'Goalkeeper'
]
],
[
'value',
[
'number',
'1'
]
]
]
]
]
]
]
use 5.010;
use strict;
use warnings;
use Data::Dumper;
$Data::Dumper::Indent = 1;
$Data::Dumper::Terse = 1;
$Data::Dumper::Deepcopy = 1;
use Marpa::R2;
my $g = Marpa::R2::Scanless::G->new( { source => \(<<'END_OF_SOURCE'),
:default ::= action => [ name, value ]
lexeme default = action => [ name, value ] latm => 1
data ::= heading tables
heading ::= string
tables ::= table+
table ::= level1 name (':') value rows
rows ::= row+
row ::= level2 name (':') value
row ::= level3 name (':') value
row ::= level4 name (':') value
level1 ~ '+'
level2 ~ '++'
level3 ~ '+++'
level4 ~ '++++'
name ::= string
value ::= number
value ::= string
value ::=
string ~ [a-zA-Z\& ]+
number ~ [\d]+
:discard ~ whitespace
whitespace ~ [\s]+
END_OF_SOURCE
} );
my $input = <<EOI;
Soccer
+Team:US
++Shirt:Red & White Stripes
++Shorts:Blue
++Players:17
+++Active:11
++++Forward:2
++++Midfield:4
++++Defense:4
++++Goalkeeper:1
+++Substitute:6
++++Forward:1
++++Midfied:2
++++Defense:3
++++Goalkeeper:
+Team:Mexico
++Shirt:Green
++Shorts:White
++Players:17
+++Active:11
++++Forward:3
++++Midfield:3
++++Defense:4
++++Goalkeeper:1
+++Substitute:6
++++Forward:2
++++Midfield:1
++++Defense:2
++++Goalkeeper:1
EOI
say Dumper $g->parse( \$input );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment