Skip to content

Instantly share code, notes, and snippets.

@rns
Created October 15, 2014 14:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rns/cb9f19989565309de914 to your computer and use it in GitHub Desktop.
Save rns/cb9f19989565309de914 to your computer and use it in GitHub Desktop.
# Output of $r->ambiguous(): at C:\cygwin\home\Ruslan\Marpa-R2-work\q26173372-asf.pl line 84.
Length of symbol "table" at line 3, column 1 is ambiguous
Choices start with: +Team:US
Choice 1, length=415, ends at C:\cygwin\home\Ruslan\Marpa-R2-work\q26173372-asf.pl line 85.
# Output of $r->value(), max_parses is in effect, so works ok: at C:\cygwin\home\Ruslan\Marpa-R2-work\q26173372-asf.pl line 89.
['data',['heading',['string','Soccer']],['tables',['table',['row',['level','+'],['name',['string','Team']],':',['value',['string','US']]],['row',['level','++'],['name',['string','Shirt']],':',['value',['string','Red & White Stripes']]],['row',['level','++'],['name',['string','Shorts']],':',['value',['string','Blue']]],['row',['level','++'],['name',['string','Players']],':',['value',['string','17']]],['row',['level','+++'],['name',['string','Active']],':',['value',['string','11']]],['row',['level','++++'],['name',['string','Forward']],':',['value',['string','2']]],['row',['level','++++'],['name',['string','Midfield']],':',['value',['string','4']]],['row',['level','++++'],['name',['string','Defense']],':',['value',['string','4']]],['row',['level','++++'],['name',['string','Goalkeeper']],':',['value',['string','1']]],['row',['level','+++'],['name',['string','Substitute']],':',['value',['string','6']]],['row',['level','++++'],['name',['string','Forward']],':',['value',['string','1']]],['row',['level','++++'],['name',['string','Midfied']],':',['value',['string','2']]],['row',['level','++++'],['name',['string','Defense']],':',['value',['string','3']]],['row',['level','++++'],['name',['string','Goalkeeper']],':',['value']],['row',['level','+'],['name',['string','Team']],':',['value',['string','Mexico']]],['row',['level','++'],['name',['string','Shirt']],':',['value',['string','Green']]],['row',['level','++'],['name',['string','Shorts']],':',['value',['string','White']]],['row',['level','++'],['name',['string','Players']],':',['value',['string','17']]],['row',['level','+++'],['name',['string','Active']],':',['value',['string','11']]],['row',['level','++++'],['name',['string','Forward']],':',['value',['string','3']]],['row',['level','++++'],['name',['string','Midfield']],':',['value',['string','3']]],['row',['level','++++'],['name',['string','Defense']],':',['value',['string','4']]],['row',['level','++++'],['name',['string','Goalkeeper']],':',['value',['string','1']]],['row',['level','+++'],['name',['string','Substitute']],':',['value',['string','6']]],['row',['level','++++'],['name',['string','Forward']],':',['value',['string','2']]],['row',['level','++++'],['name',['string','Midfield']],':',['value',['string','1']]],['row',['level','++++'],['name',['string','Defense']],':',['value',['string','2']]],['row',['level','++++'],['name',['string','Goalkeeper']],':',['value',['string','1']]]]]] at C:\cygwin\home\Ruslan\Marpa-R2-work\q26173372-asf.pl line 95.
eval {...} called at C:\cygwin\home\Ruslan\Marpa-R2-work\q26173372-asf.pl line 91
['data',['heading',['string','Soccer']],['tables',['table',['row',['level','+'],['name',['string','Team']],':',['value',['string','US']]],['row',['level','++'],['name',['string','Shirt']],':',['value',['string','Red & White Stripes']]],['row',['level','++'],['name',['string','Shorts']],':',['value',['string','Blue']]],['row',['level','++'],['name',['string','Players']],':',['value',['number','17']]],['row',['level','+++'],['name',['string','Active']],':',['value',['string','11']]],['row',['level','++++'],['name',['string','Forward']],':',['value',['string','2']]],['row',['level','++++'],['name',['string','Midfield']],':',['value',['string','4']]],['row',['level','++++'],['name',['string','Defense']],':',['value',['string','4']]],['row',['level','++++'],['name',['string','Goalkeeper']],':',['value',['string','1']]],['row',['level','+++'],['name',['string','Substitute']],':',['value',['string','6']]],['row',['level','++++'],['name',['string','Forward']],':',['value',['string','1']]],['row',['level','++++'],['name',['string','Midfied']],':',['value',['string','2']]],['row',['level','++++'],['name',['string','Defense']],':',['value',['string','3']]],['row',['level','++++'],['name',['string','Goalkeeper']],':',['value']],['row',['level','+'],['name',['string','Team']],':',['value',['string','Mexico']]],['row',['level','++'],['name',['string','Shirt']],':',['value',['string','Green']]],['row',['level','++'],['name',['string','Shorts']],':',['value',['string','White']]],['row',['level','++'],['name',['string','Players']],':',['value',['string','17']]],['row',['level','+++'],['name',['string','Active']],':',['value',['string','11']]],['row',['level','++++'],['name',['string','Forward']],':',['value',['string','3']]],['row',['level','++++'],['name',['string','Midfield']],':',['value',['string','3']]],['row',['level','++++'],['name',['string','Defense']],':',['value',['string','4']]],['row',['level','++++'],['name',['string','Goalkeeper']],':',['value',['string','1']]],['row',['level','+++'],['name',['string','Substitute']],':',['value',['string','6']]],['row',['level','++++'],['name',['string','Forward']],':',['value',['string','2']]],['row',['level','++++'],['name',['string','Midfield']],':',['value',['string','1']]],['row',['level','++++'],['name',['string','Defense']],':',['value',['string','2']]],['row',['level','++++'],['name',['string','Goalkeeper']],':',['value',['string','1']]]]]] at C:\cygwin\home\Ruslan\Marpa-R2-work\q26173372-asf.pl line 95.
eval {...} called at C:\cygwin\home\Ruslan\Marpa-R2-work\q26173372-asf.pl line 91
['data',['heading',['string','Soccer']],['tables',['table',['row',['level','+'],['name',['string','Team']],':',['value',['string','US']]],['row',['level','++'],['name',['string','Shirt']],':',['value',['string','Red & White Stripes']]],['row',['level','++'],['name',['string','Shorts']],':',['value',['string','Blue']]],['row',['level','++'],['name',['string','Players']],':',['value',['string','17']]],['row',['level','+++'],['name',['string','Active']],':',['value',['number','11']]],['row',['level','++++'],['name',['string','Forward']],':',['value',['string','2']]],['row',['level','++++'],['name',['string','Midfield']],':',['value',['string','4']]],['row',['level','++++'],['name',['string','Defense']],':',['value',['string','4']]],['row',['level','++++'],['name',['string','Goalkeeper']],':',['value',['string','1']]],['row',['level','+++'],['name',['string','Substitute']],':',['value',['string','6']]],['row',['level','++++'],['name',['string','Forward']],':',['value',['string','1']]],['row',['level','++++'],['name',['string','Midfied']],':',['value',['string','2']]],['row',['level','++++'],['name',['string','Defense']],':',['value',['string','3']]],['row',['level','++++'],['name',['string','Goalkeeper']],':',['value']],['row',['level','+'],['name',['string','Team']],':',['value',['string','Mexico']]],['row',['level','++'],['name',['string','Shirt']],':',['value',['string','Green']]],['row',['level','++'],['name',['string','Shorts']],':',['value',['string','White']]],['row',['level','++'],['name',['string','Players']],':',['value',['string','17']]],['row',['level','+++'],['name',['string','Active']],':',['value',['string','11']]],['row',['level','++++'],['name',['string','Forward']],':',['value',['string','3']]],['row',['level','++++'],['name',['string','Midfield']],':',['value',['string','3']]],['row',['level','++++'],['name',['string','Defense']],':',['value',['string','4']]],['row',['level','++++'],['name',['string','Goalkeeper']],':',['value',['string','1']]],['row',['level','+++'],['name',['string','Substitute']],':',['value',['string','6']]],['row',['level','++++'],['name',['string','Forward']],':',['value',['string','2']]],['row',['level','++++'],['name',['string','Midfield']],':',['value',['string','1']]],['row',['level','++++'],['name',['string','Defense']],':',['value',['string','2']]],['row',['level','++++'],['name',['string','Goalkeeper']],':',['value',['string','1']]]]]] at C:\cygwin\home\Ruslan\Marpa-R2-work\q26173372-asf.pl line 95.
eval {...} called at C:\cygwin\home\Ruslan\Marpa-R2-work\q26173372-asf.pl line 91
['data',['heading',['string','Soccer']],['tables',['table',['row',['level','+'],['name',['string','Team']],':',['value',['string','US']]],['row',['level','++'],['name',['string','Shirt']],':',['value',['string','Red & White Stripes']]],['row',['level','++'],['name',['string','Shorts']],':',['value',['string','Blue']]],['row',['level','++'],['name',['string','Players']],':',['value',['number','17']]],['row',['level','+++'],['name',['string','Active']],':',['value',['number','11']]],['row',['level','++++'],['name',['string','Forward']],':',['value',['string','2']]],['row',['level','++++'],['name',['string','Midfield']],':',['value',['string','4']]],['row',['level','++++'],['name',['string','Defense']],':',['value',['string','4']]],['row',['level','++++'],['name',['string','Goalkeeper']],':',['value',['string','1']]],['row',['level','+++'],['name',['string','Substitute']],':',['value',['string','6']]],['row',['level','++++'],['name',['string','Forward']],':',['value',['string','1']]],['row',['level','++++'],['name',['string','Midfied']],':',['value',['string','2']]],['row',['level','++++'],['name',['string','Defense']],':',['value',['string','3']]],['row',['level','++++'],['name',['string','Goalkeeper']],':',['value']],['row',['level','+'],['name',['string','Team']],':',['value',['string','Mexico']]],['row',['level','++'],['name',['string','Shirt']],':',['value',['string','Green']]],['row',['level','++'],['name',['string','Shorts']],':',['value',['string','White']]],['row',['level','++'],['name',['string','Players']],':',['value',['string','17']]],['row',['level','+++'],['name',['string','Active']],':',['value',['string','11']]],['row',['level','++++'],['name',['string','Forward']],':',['value',['string','3']]],['row',['level','++++'],['name',['string','Midfield']],':',['value',['string','3']]],['row',['level','++++'],['name',['string','Defense']],':',['value',['string','4']]],['row',['level','++++'],['name',['string','Goalkeeper']],':',['value',['string','1']]],['row',['level','+++'],['name',['string','Substitute']],':',['value',['string','6']]],['row',['level','++++'],['name',['string','Forward']],':',['value',['string','2']]],['row',['level','++++'],['name',['string','Midfield']],':',['value',['string','1']]],['row',['level','++++'],['name',['string','Defense']],':',['value',['string','2']]],['row',['level','++++'],['name',['string','Goalkeeper']],':',['value',['string','1']]]]]] at C:\cygwin\home\Ruslan\Marpa-R2-work\q26173372-asf.pl line 95.
eval {...} called at C:\cygwin\home\Ruslan\Marpa-R2-work\q26173372-asf.pl line 91
# Output of asf_to_basic_tree()/array_diplay() from Marpa::R2::Glade: at C:\cygwin\home\Ruslan\Marpa-R2-work\q26173372-asf.pl line 100.
Glade 2, Rule (0-422) data ::= heading tables
Glade 1, Rule (0-5) heading ::= string
Glade 6, Token (0-5) string: "Soccer"
Glade 4, symch 0 has 41 factorings
Glade 4, Rule (8-422) tables ::= table +
Glade 9, Rule (8-422) table ::= row +
Glade 64, Rule (8-15) row ::= level name ':' value
Glade 68, Token (8-8) level: "+"
Glade 67, Rule (9-12) name ::= string
Glade 70, Token (9-12) string: "Team"
Glade 66, Token (13-13) ':': ":"
Glade 7, Rule (14-15) value ::= string
Glade 73, Token (14-15) string: "US"
Glade 63, Rule (17-43) row ::= level name ':' value
Glade 79, Token (17-18) level: "++"
Glade 78, Rule (19-23) name ::= string
Glade 82, Token (19-23) string: "Shirt"
Glade 77, Token (24-24) ':': ":"
Glade 76, Rule (25-43) value ::= string
Glade 86, Token (25-43) string: "Red & White Stripes"
Glade 62, Rule (45-57) row ::= level name ':' value
Glade 91, Token (45-46) level: "++"
Glade 90, Rule (47-52) name ::= string
Glade 93, Token (47-52) string: "Shorts"
Glade 89, Token (53-53) ':': ":"
Glade 88, Rule (54-57) value ::= string
Glade 96, Token (54-57) string: "Blue"
Glade 61, Rule (59-70) row ::= level name ':' value
Glade 102, Token (59-60) level: "++"
Glade 101, Rule (61-67) name ::= string
Glade 105, Token (61-67) string: "Players"
Glade 100, Token (68-68) ':': ":"
Glade 99 has 2 symches
Glade 99, Symch 0, Rule (69-70) value ::= number
Glade 111, Token (69-70) number: "17"
Glade 99, Symch 1, Rule (69-70) value ::= string
Glade 112, Token (69-70) string: "17"
Glade 60, Rule (72-83) row ::= level name ':' value
Glade 118, Token (72-74) level: "+++"
Glade 117, Rule (75-80) name ::= string
Glade 120, Token (75-80) string: "Active"
Glade 116, Token (81-81) ':': ":"
Glade 115 has 2 symches
Glade 115, Symch 0, Rule (82-83) value ::= string
Glade 124, Token (82-83) string: "11"
Glade 115, Symch 1, Rule (82-83) value ::= number
Glade 125, Token (82-83) number: "11"
Glade 59, Rule (85-97) row ::= level name ':' value
Glade 132, Token (85-88) level: "++++"
Glade 131, Rule (89-95) name ::= string
Glade 135, Token (89-95) string: "Forward"
Glade 130, Token (96-96) ':': ":"
Glade 129 has 2 symches
Glade 129, Symch 0, Rule (97-97) value ::= number
Glade 141, Token (97-97) number: "2"
Glade 129, Symch 1, Rule (97-97) value ::= string
Glade 142, Token (97-97) string: "2"
Glade 58, Rule (99-112) row ::= level name ':' value
Glade 148, Token (99-102) level: "++++"
Glade 147, Rule (103-110) name ::= string
Glade 151, Token (103-110) string: "Midfield"
Glade 146, Token (111-111) ':': ":"
Glade 145 has 2 symches
Glade 145, Symch 0, Rule (112-112) value ::= number
Glade 156, Token (112-112) number: "4"
Glade 145, Symch 1, Rule (112-112) value ::= string
Glade 157, Token (112-112) string: "4"
Glade 57, Rule (114-126) row ::= level name ':' value
Glade 164, Token (114-117) level: "++++"
Glade 163, Rule (118-124) name ::= string
Glade 167, Token (118-124) string: "Defense"
Glade 162, Token (125-125) ':': ":"
Glade 161 has 2 symches
Glade 161, Symch 0, Rule (126-126) value ::= number
Glade 171, Token (126-126) number: "4"
Glade 161, Symch 1, Rule (126-126) value ::= string
Glade 172, Token (126-126) string: "4"
Glade 56, Rule (128-143) row ::= level name ':' value
Glade 179, Token (128-131) level: "++++"
Glade 178, Rule (132-141) name ::= string
Glade 182, Token (132-141) string: "Goalkeeper"
Glade 177, Token (142-142) ':': ":"
Glade 176 has 2 symches
Glade 176, Symch 0, Rule (143-143) value ::= number
Glade 188, Token (143-143) number: "1"
Glade 176, Symch 1, Rule (143-143) value ::= string
Glade 189, Token (143-143) string: "1"
Glade 55, Rule (145-159) row ::= level name ':' value
Glade 196, Token (145-147) level: "+++"
Glade 195, Rule (148-157) name ::= string
Glade 199, Token (148-157) string: "Substitute"
Glade 194, Token (158-158) ':': ":"
Glade 193 has 2 symches
Glade 193, Symch 0, Rule (159-159) value ::= number
Glade 205, Token (159-159) number: "6"
Glade 193, Symch 1, Rule (159-159) value ::= string
Glade 206, Token (159-159) string: "6"
Glade 54, Rule (161-173) row ::= level name ':' value
Glade 213, Token (161-164) level: "++++"
Glade 212, Rule (165-171) name ::= string
Glade 216, Token (165-171) string: "Forward"
Glade 211, Token (172-172) ':': ":"
Glade 210 has 2 symches
Glade 210, Symch 0, Rule (173-173) value ::= number
Glade 222, Token (173-173) number: "1"
Glade 210, Symch 1, Rule (173-173) value ::= string
Glade 223, Token (173-173) string: "1"
Glade 53, Rule (175-187) row ::= level name ':' value
Glade 230, Token (175-178) level: "++++"
Glade 229, Rule (179-185) name ::= string
Glade 232, Token (179-185) string: "Midfied"
Glade 228, Token (186-186) ':': ":"
Glade 227 has 2 symches
Glade 227, Symch 0, Rule (187-187) value ::= number
Glade 237, Token (187-187) number: "2"
Glade 227, Symch 1, Rule (187-187) value ::= string
Glade 238, Token (187-187) string: "2"
Glade 52, Rule (189-201) row ::= level name ':' value
Glade 244, Token (189-192) level: "++++"
Glade 243, Rule (193-199) name ::= string
Glade 247, Token (193-199) string: "Defense"
Glade 242, Token (200-200) ':': ":"
Glade 241 has 2 symches
Glade 241, Symch 0, Rule (201-201) value ::= number
Glade 253, Token (201-201) number: "3"
Glade 241, Symch 1, Rule (201-201) value ::= string
Glade 254, Token (201-201) string: "3"
Glade 51, Rule (203-217) row ::= level name ':' value
Glade 260, Token (203-206) level: "++++"
Glade 259, Rule (207-216) name ::= string
Glade 263, Token (207-216) string: "Goalkeeper"
Glade 258, Token (217-217) ':': ":"
Glade 257, Token (56-55) value: ""
Glade 50, Rule (220-231) row ::= level name ':' value
Glade 270, Token (220-220) level: "+"
Glade 269, Rule (221-224) name ::= string
Glade 272, Token (221-224) string: "Team"
Glade 268, Token (225-225) ':': ":"
Glade 267, Rule (226-231) value ::= string
Glade 274, Token (226-231) string: "Mexico"
Glade 49, Rule (233-245) row ::= level name ':' value
Glade 280, Token (233-234) level: "++"
Glade 279, Rule (235-239) name ::= string
Glade 283, Token (235-239) string: "Shirt"
Glade 278, Token (240-240) ':': ":"
Glade 277, Rule (241-245) value ::= string
Glade 287, Token (241-245) string: "Green"
Glade 48, Rule (247-260) row ::= level name ':' value
Glade 293, Token (247-248) level: "++"
Glade 292, Rule (249-254) name ::= string
Glade 296, Token (249-254) string: "Shorts"
Glade 291, Token (255-255) ':': ":"
Glade 290, Rule (256-260) value ::= string
Glade 300, Token (256-260) string: "White"
Glade 47, Rule (262-273) row ::= level name ':' value
Glade 305, Token (262-263) level: "++"
Glade 304, Rule (264-270) name ::= string
Glade 308, Token (264-270) string: "Players"
Glade 303, Token (271-271) ':': ":"
Glade 302 has 2 symches
Glade 302, Symch 0, Rule (272-273) value ::= number
Glade 314, Token (272-273) number: "17"
Glade 302, Symch 1, Rule (272-273) value ::= string
Glade 315, Token (272-273) string: "17"
Glade 46, Rule (275-286) row ::= level name ':' value
Glade 322, Token (275-277) level: "+++"
Glade 321, Rule (278-283) name ::= string
Glade 325, Token (278-283) string: "Active"
Glade 320, Token (284-284) ':': ":"
Glade 319 has 2 symches
Glade 319, Symch 0, Rule (285-286) value ::= number
Glade 331, Token (285-286) number: "11"
Glade 319, Symch 1, Rule (285-286) value ::= string
Glade 332, Token (285-286) string: "11"
Glade 45, Rule (288-300) row ::= level name ':' value
Glade 338, Token (288-291) level: "++++"
Glade 337, Rule (292-298) name ::= string
Glade 341, Token (292-298) string: "Forward"
Glade 336, Token (299-299) ':': ":"
Glade 335 has 2 symches
Glade 335, Symch 0, Rule (300-300) value ::= number
Glade 347, Token (300-300) number: "3"
Glade 335, Symch 1, Rule (300-300) value ::= string
Glade 348, Token (300-300) string: "3"
Glade 44, Rule (302-315) row ::= level name ':' value
Glade 355, Token (302-305) level: "++++"
Glade 354, Rule (306-313) name ::= string
Glade 358, Token (306-313) string: "Midfield"
Glade 353, Token (314-314) ':': ":"
Glade 352 has 2 symches
Glade 352, Symch 0, Rule (315-315) value ::= number
Glade 362, Token (315-315) number: "3"
Glade 352, Symch 1, Rule (315-315) value ::= string
Glade 363, Token (315-315) string: "3"
Glade 43, Rule (317-329) row ::= level name ':' value
Glade 370, Token (317-320) level: "++++"
Glade 369, Rule (321-327) name ::= string
Glade 373, Token (321-327) string: "Defense"
Glade 368, Token (328-328) ':': ":"
Glade 367 has 2 symches
Glade 367, Symch 0, Rule (329-329) value ::= number
Glade 379, Token (329-329) number: "4"
Glade 367, Symch 1, Rule (329-329) value ::= string
Glade 380, Token (329-329) string: "4"
Glade 42, Rule (331-346) row ::= level name ':' value
Glade 386, Token (331-334) level: "++++"
Glade 385, Rule (335-344) name ::= string
Glade 389, Token (335-344) string: "Goalkeeper"
Glade 384, Token (345-345) ':': ":"
Glade 383 has 2 symches
Glade 383, Symch 0, Rule (346-346) value ::= number
Glade 395, Token (346-346) number: "1"
Glade 383, Symch 1, Rule (346-346) value ::= string
Glade 396, Token (346-346) string: "1"
Glade 41, Rule (348-362) row ::= level name ':' value
Glade 403, Token (348-350) level: "+++"
Glade 402, Rule (351-360) name ::= string
Glade 405, Token (351-360) string: "Substitute"
Glade 401, Token (361-361) ':': ":"
Glade 400 has 2 symches
Glade 400, Symch 0, Rule (362-362) value ::= number
Glade 410, Token (362-362) number: "6"
Glade 400, Symch 1, Rule (362-362) value ::= string
Glade 411, Token (362-362) string: "6"
Glade 40, Rule (364-376) row ::= level name ':' value
Glade 418, Token (364-367) level: "++++"
Glade 417, Rule (368-374) name ::= string
Glade 421, Token (368-374) string: "Forward"
Glade 416, Token (375-375) ':': ":"
Glade 415 has 2 symches
Glade 415, Symch 0, Rule (376-376) value ::= number
Glade 427, Token (376-376) number: "2"
Glade 415, Symch 1, Rule (376-376) value ::= string
Glade 428, Token (376-376) string: "2"
Glade 39, Rule (378-391) row ::= level name ':' value
Glade 435, Token (378-381) level: "++++"
Glade 434, Rule (382-389) name ::= string
Glade 438, Token (382-389) string: "Midfield"
Glade 433, Token (390-390) ':': ":"
Glade 432 has 2 symches
Glade 432, Symch 0, Rule (391-391) value ::= number
Glade 444, Token (391-391) number: "1"
Glade 432, Symch 1, Rule (391-391) value ::= string
Glade 445, Token (391-391) string: "1"
Glade 38, Rule (393-405) row ::= level name ':' value
Glade 451, Token (393-396) level: "++++"
Glade 450, Rule (397-403) name ::= string
Glade 454, Token (397-403) string: "Defense"
Glade 449, Token (404-404) ':': ":"
Glade 448 has 2 symches
Glade 448, Symch 0, Rule (405-405) value ::= number
Glade 460, Token (405-405) number: "2"
Glade 448, Symch 1, Rule (405-405) value ::= string
Glade 461, Token (405-405) string: "2"
Glade 37, Rule (407-422) row ::= level name ':' value
Glade 468, Token (407-410) level: "++++"
Glade 467, Rule (411-420) name ::= string
Glade 471, Token (411-420) string: "Goalkeeper"
Glade 466, Token (421-421) ':': ":"
Glade 465 has 2 symches
Glade 465, Symch 0, Rule (422-422) value ::= number
Glade 477, Token (422-422) number: "1"
Glade 465, Symch 1, Rule (422-422) value ::= string
Glade 478, Token (422-422) string: "1"
Glade 11, Rule (8-15) table ::= row +
Glade 64 revisited
Glade 10, Rule (17-422) table ::= row +
Glade 63 revisited
Glade 62 revisited
Glade 61 revisited
Glade 60 revisited
Glade 59 revisited
Glade 58 revisited
Glade 57 revisited
Glade 56 revisited
Glade 55 revisited
Glade 54 revisited
Glade 53 revisited
Glade 52 revisited
Glade 51 revisited
Glade 50 revisited
Glade 49 revisited
Glade 48 revisited
Glade 47 revisited
Glade 46 revisited
Glade 45 revisited
Glade 44 revisited
Glade 43 revisited
Glade 42 revisited
Glade 41 revisited
Glade 40 revisited
Glade 39 revisited
Glade 38 revisited
Glade 37 revisited
Glade 13, Rule (8-43) table ::= row +
Glade 64 revisited
Glade 63 revisited
Glade 12, Rule (45-422) table ::= row +
Glade 62 revisited
Glade 61 revisited
Glade 60 revisited
Glade 59 revisited
Glade 58 revisited
Glade 57 revisited
Glade 56 revisited
Glade 55 revisited
Glade 54 revisited
Glade 53 revisited
Glade 52 revisited
Glade 51 revisited
Glade 50 revisited
Glade 49 revisited
Glade 48 revisited
Glade 47 revisited
Glade 46 revisited
Glade 45 revisited
Glade 44 revisited
Glade 43 revisited
Glade 42 revisited
Glade 41 revisited
Glade 40 revisited
Glade 39 revisited
Glade 38 revisited
Glade 37 revisited
Glade 11 revisited
Glade 14, Rule (17-43) table ::= row +
Glade 63 revisited
Glade 12 revisited
Glade 16, Rule (8-57) table ::= row +
Glade 64 revisited
Glade 63 revisited
Glade 62 revisited
Glade 15, Rule (59-422) table ::= row +
Glade 61 revisited
Glade 60 revisited
Glade 59 revisited
Glade 58 revisited
Glade 57 revisited
Glade 56 revisited
Glade 55 revisited
Glade 54 revisited
Glade 53 revisited
Glade 52 revisited
Glade 51 revisited
Glade 50 revisited
Glade 49 revisited
Glade 48 revisited
Glade 47 revisited
Glade 46 revisited
Glade 45 revisited
Glade 44 revisited
Glade 43 revisited
Glade 42 revisited
Glade 41 revisited
Glade 40 revisited
Glade 39 revisited
Glade 38 revisited
Glade 37 revisited
Glade 11 revisited
Glade 17, Rule (17-57) table ::= row +
Glade 63 revisited
Glade 62 revisited
Glade 15 revisited
Glade 13 revisited
Glade 18, Rule (45-57) table ::= row +
Glade 62 revisited
Glade 15 revisited
Glade 11 revisited
Glade 14 revisited
Glade 18 revisited
Glade 15 revisited
Glade 20, Rule (8-70) table ::= row +
Glade 64 revisited
Glade 63 revisited
Glade 62 revisited
Glade 61 revisited
Glade 19, Rule (72-422) table ::= row +
Glade 60 revisited
Glade 59 revisited
Glade 58 revisited
Glade 57 revisited
Glade 56 revisited
Glade 55 revisited
Glade 54 revisited
Glade 53 revisited
Glade 52 revisited
Glade 51 revisited
Glade 50 revisited
Glade 49 revisited
Glade 48 revisited
Glade 47 revisited
Glade 46 revisited
Glade 45 revisited
Glade 44 revisited
Glade 43 revisited
Glade 42 revisited
Glade 41 revisited
Glade 40 revisited
Glade 39 revisited
Glade 38 revisited
Glade 37 revisited
Glade 11 revisited
Glade 21, Rule (17-70) table ::= row +
Glade 63 revisited
Glade 62 revisited
Glade 61 revisited
Glade 19 revisited
Glade 13 revisited
Glade 22, Rule (45-70) table ::= row +
Glade 62 revisited
Glade 61 revisited
Glade 19 revisited
Glade 11 revisited
Glade 14 revisited
Glade 22 revisited
Glade 19 revisited
Glade 16 revisited
Glade 23, Rule (59-70) table ::= row +
Glade 61 revisited
Glade 19 revisited
Glade 11 revisited
Glade 17 revisited
Glade 23 revisited
Glade 19 revisited
Glade 13 revisited
Glade 18 revisited
Glade 23 revisited
Glade 19 revisited
Glade 11 revisited
Glade 14 revisited
Glade 18 revisited
Glade 23 revisited
Glade 19 revisited
Glade 25, Rule (8-83) table ::= row +
Glade 64 revisited
Glade 63 revisited
Glade 62 revisited
Glade 61 revisited
Glade 60 revisited
Glade 24, Rule (85-422) table ::= row +
Glade 59 revisited
Glade 58 revisited
Glade 57 revisited
Glade 56 revisited
Glade 55 revisited
Glade 54 revisited
Glade 53 revisited
Glade 52 revisited
Glade 51 revisited
Glade 50 revisited
Glade 49 revisited
Glade 48 revisited
Glade 47 revisited
Glade 46 revisited
Glade 45 revisited
Glade 44 revisited
Glade 43 revisited
Glade 42 revisited
Glade 41 revisited
Glade 40 revisited
Glade 39 revisited
Glade 38 revisited
Glade 37 revisited
Glade 11 revisited
Glade 26, Rule (17-83) table ::= row +
Glade 63 revisited
Glade 62 revisited
Glade 61 revisited
Glade 60 revisited
Glade 24 revisited
Glade 13 revisited
Glade 27, Rule (45-83) table ::= row +
Glade 62 revisited
Glade 61 revisited
Glade 60 revisited
Glade 24 revisited
Glade 11 revisited
Glade 14 revisited
Glade 27 revisited
Glade 24 revisited
Glade 16 revisited
Glade 28, Rule (59-83) table ::= row +
Glade 61 revisited
Glade 60 revisited
Glade 24 revisited
Glade 11 revisited
Glade 17 revisited
Glade 28 revisited
Glade 24 revisited
Glade 13 revisited
Glade 18 revisited
Glade 28 revisited
Glade 24 revisited
Glade 11 revisited
Glade 14 revisited
Glade 18 revisited
Glade 28 revisited
Glade 24 revisited
Glade 20 revisited
Glade 29, Rule (72-83) table ::= row +
Glade 60 revisited
Glade 24 revisited
Glade 11 revisited
Glade 21 revisited
Glade 29 revisited
Glade 24 revisited
Glade 13 revisited
Glade 22 revisited
Glade 29 revisited
Glade 24 revisited
Glade 11 revisited
Glade 14 revisited
Glade 22 revisited
Glade 29 revisited
Glade 24 revisited
Glade 16 revisited
Glade 23 revisited
Glade 29 revisited
Glade 24 revisited
Glade 11 revisited
Glade 17 revisited
Glade 23 revisited
Glade 29 revisited
Glade 24 revisited
Glade 13 revisited
Glade 18 revisited
Glade 23 revisited
Glade 29 revisited
Glade 24 revisited
Glade 11 revisited
Glade 14 revisited
Glade 18 revisited
Glade 23 revisited
Glade 29 revisited
Glade 24 revisited
Glade 31, Rule (8-97) table ::= row +
Glade 64 revisited
Glade 63 revisited
Glade 62 revisited
Glade 61 revisited
Glade 60 revisited
Glade 59 revisited
Glade 30, Rule (99-422) table ::= row +
Glade 58 revisited
Glade 57 revisited
Glade 56 revisited
Glade 55 revisited
Glade 54 revisited
Glade 53 revisited
Glade 52 revisited
Glade 51 revisited
Glade 50 revisited
Glade 49 revisited
Glade 48 revisited
Glade 47 revisited
Glade 46 revisited
Glade 45 revisited
Glade 44 revisited
Glade 43 revisited
Glade 42 revisited
Glade 41 revisited
Glade 40 revisited
Glade 39 revisited
Glade 38 revisited
Glade 37 revisited
Glade 11 revisited
Glade 32, Rule (17-97) table ::= row +
Glade 63 revisited
Glade 62 revisited
Glade 61 revisited
Glade 60 revisited
Glade 59 revisited
Glade 30 revisited
Glade 13 revisited
Glade 33, Rule (45-97) table ::= row +
Glade 62 revisited
Glade 61 revisited
Glade 60 revisited
Glade 59 revisited
Glade 30 revisited
Glade 11 revisited
Glade 14 revisited
Glade 33 revisited
Glade 30 revisited
Glade 16 revisited
Glade 34, Rule (59-97) table ::= row +
Glade 61 revisited
Glade 60 revisited
Glade 59 revisited
Glade 30 revisited
Glade 11 revisited
Glade 17 revisited
Glade 34 revisited
Glade 30 revisited
Glade 13 revisited
Glade 18 revisited
Glade 34 revisited
Glade 30 revisited
Glade 11 revisited
Glade 14 revisited
Glade 18 revisited
Glade 34 revisited
Glade 30 revisited
Glade 20 revisited
Glade 35, Rule (72-97) table ::= row +
Glade 60 revisited
Glade 59 revisited
Glade 30 revisited
at C:\cygwin\home\Ruslan\Marpa-R2-work\q26173372-asf.pl line 106.
# Output of asf->traverse(): (tries to enumerate ASTs, takes a long time) at C:\cygwin\home\Ruslan\Marpa-R2-work\q26173372-asf.pl line 110.
use 5.010;
use strict;
use warnings;
use Data::Dumper;
$Data::Dumper::Indent = 0;
$Data::Dumper::Terse = 1;
$Data::Dumper::Deepcopy = 1;
use Carp::Always; # force stack trace
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 ::= row+
row ::= level name ':' value
level ~ '+' | '++' | '+++' | '++++'
name ::= string
value ::= number
value ::= string
value ::=
string ~ [\w\& ]+
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
my $r = Marpa::R2::Scanless::R->new( {
max_parses => 3,
grammar => $g,
# trace_terminals => 1
} );
eval {$r->read(\$input)} || warn "Parse failure, progress report is:\n" . $r->show_progress;
# this runs ok
warn "\n# Output of \$r->ambiguous():";
warn $r->ambiguous();
# tries to enumerate ASTs, which *would* take a long time
# but max_parses does its job and it ends well
warn "\n# Output of \$r->value(), max_parses is in effect, so works ok:";
$r->series_restart();
eval {
# Marpa::R2::value()
my $i = 0; # 2 million reached
while ( defined( my $value_ref = $r->value() ) ) {
warn Dumper ${ $value_ref };
}
};
# Marpa::R2::Glade -- reports ambiguities ok
warn "\n# Output of asf_to_basic_tree()/array_diplay() from Marpa::R2::Glade:";
$r->series_restart();
my $asf = Marpa::R2::ASF->new( { slr => $r } );
die 'No ASF' if not defined $asf;
my $output_as_array = asf_to_basic_tree($asf);
my $actual_output = array_display($output_as_array);
warn $actual_output;
# Marpa::R2::ASF -- tries to enumerate ASTs, takes a long time
# max_parses does not apply
warn "\n# Output of asf->traverse(): (tries to enumerate ASTs, takes a long time)";
$r->series_restart();
$asf = Marpa::R2::ASF->new( { slr => $r, factoring_max => 2 } );
die 'No ASF' if not defined $asf;
exit; # or the process will need to be killed,
# 2^8192 values can be expected from 32 lines of input with this grammar.
my $full_result = $asf->traverse( {}, \&full_traverser );
warn Dumper $full_result;
# ================================================================================
# full_traverser code Marpa::R2::ASF
#
sub full_traverser {
# This routine converts the glade into a list of elements. It is called recursively.
my ($glade, $scratch) = @_;
my $rule_id = $glade->rule_id();
my $symbol_id = $glade->symbol_id();
my $symbol_name = $g->symbol_name($symbol_id);
# A token is a single choice, and we know enough to return it
if ( not defined $rule_id ) {
my $literal = $glade->literal();
return ["($literal)"];
} ## end if ( not defined $rule_id )
# Our result will be a list of choices
my @return_value = ();
CHOICE: while (1) {
# The results at each position are a list of choices, so
# to produce a new result list, we need to take a Cartesian
# product of all the choices
my $length = $glade->rh_length();
my @results = ( [] );
for my $rh_ix ( 0 .. $length - 1 ) {
my @new_results = ();
for my $old_result (@results) {
my $child_value = $glade->rh_value($rh_ix);
for my $new_value ( @{ $child_value } ) {
push @new_results, [ @{$old_result}, $new_value ];
}
}
@results = @new_results;
} ## end for my $rh_ix ( 0 .. $length - 1 )
# Special case for the start rule
if ( $symbol_name eq '[:start]' ) {
return [ map { join q{}, @{$_} } @results ];
}
# Now we have a list of choices, as a list of lists. Each sub list
# is a list of elements, which we need to join into
# a single element. The result will be to collapse
# one level of lists, and leave us with a list of
# elements
my $join_ws = q{ };
$join_ws = qq{\n } if $symbol_name eq 'S';
push @return_value,
map { '(' . $symbol_name . q{ } . ( join $join_ws, @{$_} ) . ')' }
@results;
# Look at the next alternative in this glade, or end the
# loop if there is none
last CHOICE if not defined $glade->next();
} ## end CHOICE: while (1)
# Return the list of elements for this glade
return \@return_value;
} ## end sub full_traverser
# ================================================================================
# Example code from Marpa::R2::Glade
#
sub asf_to_basic_tree {
my ( $asf, $glade ) = @_;
my $peak = $asf->peak();
return glade_to_basic_tree( $asf, $peak, [] );
} ## end sub asf_to_basic_tree
sub glade_to_basic_tree {
my ( $asf, $glade, $seen ) = @_;
return bless ["Glade $glade revisited"], 'My_Revisit'
if $seen->[$glade];
$seen->[$glade] = 1;
my $grammar = $asf->grammar();
my @symches = ();
my $symch_count = $asf->glade_symch_count($glade);
# get span
my ( $start, $length ) = $asf->glade_span($glade);
my $end = $start + $length - 1;
SYMCH: for ( my $symch_ix = 0; $symch_ix < $symch_count; $symch_ix++ ) {
my $rule_id = $asf->symch_rule_id( $glade, $symch_ix );
if ( $rule_id < 0 ) {
my $literal = $asf->glade_literal($glade);
my $symbol_id = $asf->glade_symbol_id($glade);
my $display_form = $grammar->symbol_display_form($symbol_id);
push @symches,
bless [qq{Glade $glade, Token ($start-$end) $display_form: "$literal"}],
'My_Token';
next SYMCH;
} ## end if ( $rule_id < 0 )
# ignore any truncation of the factorings
my $factoring_count =
$asf->symch_factoring_count( $glade, $symch_ix );
my @symch_description = ("Glade $glade");
push @symch_description, "Symch $symch_ix" if $symch_count > 1;
push @symch_description, "Rule ($start-$end) " . $grammar->rule_show($rule_id);
my $symch_description = join q{, }, @symch_description;
my @factorings = ($symch_description);
for (
my $factoring_ix = 0;
$factoring_ix < $factoring_count;
$factoring_ix++
)
{
my $downglades =
$asf->factoring_downglades( $glade, $symch_ix,
$factoring_ix );
push @factorings,
bless [ map { glade_to_basic_tree( $asf, $_, $seen ) }
@{$downglades} ], 'My_Rule';
} ## end for ( my $factoring_ix = 0; $factoring_ix < $factoring_count...)
if ( $factoring_count > 1 ) {
push @symches,
bless [
"Glade $glade, symch $symch_ix has $factoring_count factorings",
@factorings
],
'My_Factorings';
next SYMCH;
} ## end if ( $factoring_count > 1 )
push @symches, bless [ @factorings[ 0, 1 ] ], 'My_Factorings';
} ## end SYMCH: for ( my $symch_ix = 0; $symch_ix < $symch_count; ...)
return bless [ "Glade $glade has $symch_count symches", @symches ],
'My_Symches'
if $symch_count > 1;
return $symches[0];
} ## end sub glade_to_basic_tree
sub array_display {
my ($array) = @_;
my ( undef, @lines ) = @{ array_lines_display($array) };
my $text = q{};
for my $line (@lines) {
my ( $indent, $body ) = @{$line};
$indent -= 6;
$text .= ( q{ } x $indent ) . $body . "\n";
}
return $text;
} ## end sub array_display
sub array_lines_display {
my ($array) = @_;
my $reftype = Scalar::Util::reftype($array) // '!undef!';
return [ [ 0, $array ] ] if $reftype ne 'ARRAY';
my @lines = ();
ELEMENT: for my $element ( @{$array} ) {
for my $line ( @{ array_lines_display($element) } ) {
my ( $indent, $body ) = @{$line};
push @lines, [ $indent + 2, $body ];
}
} ## end ELEMENT: for my $element ( @{$array} )
return \@lines;
} ## end sub array_lines_display
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment