sportdb-parser 0.6.4 → 0.6.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +1 -1
- data/lib/sportdb/parser/lexer.rb +64 -17
- data/lib/sportdb/parser/parser.rb +630 -461
- data/lib/sportdb/parser/racc_tree.rb +38 -3
- data/lib/sportdb/parser/token-prop.rb +40 -0
- data/lib/sportdb/parser/token.rb +9 -0
- data/lib/sportdb/parser/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 150ee98d02311f0436226fb662d1cde426c6f91a88e6298257252c58e827cb17
|
4
|
+
data.tar.gz: e06fb067d2ddc317fe4f7ba033b512f378d6fa32da58756238e30d617653755e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 95c28de0c34ab52e3ca0f49fdd6ec5634dbaee2cf35e6a3c221d6f38f0d463d0e7e381151cd7572a88026a508f2991e822bf3882c46b7943903bc73a1d7477e6
|
7
|
+
data.tar.gz: 3a5fd4e4dbb4731201f152732791afb544fc05ee7136a8021e98faf7fe6a7fcedd0b22699848e22e9a39fa74dab2a9686f908cde74c8cc50b2e80e2fc491ebd1
|
data/CHANGELOG.md
CHANGED
data/lib/sportdb/parser/lexer.rb
CHANGED
@@ -327,9 +327,27 @@ def _tokenize_line( line )
|
|
327
327
|
if m
|
328
328
|
### switch into new mode
|
329
329
|
## switch context to PROP_RE
|
330
|
-
@re = PROP_RE
|
331
330
|
puts " ENTER PROP_RE MODE" if debug?
|
332
|
-
|
331
|
+
key = m[:key]
|
332
|
+
|
333
|
+
|
334
|
+
### todo - add prop yellow/red cards too - why? why not?
|
335
|
+
if ['sent off', 'red cards'].include?( key.downcase)
|
336
|
+
@re = PROP_CARDS_RE ## use CARDS_RE ???
|
337
|
+
tokens << [:PROP_REDCARDS, m[:key]]
|
338
|
+
elsif ['yellow cards'].include?( key.downcase )
|
339
|
+
@re = PROP_CARDS_RE
|
340
|
+
tokens << [:PROP_YELLOWCARDS, m[:key]]
|
341
|
+
elsif ['ref', 'referee'].include?( key.downcase )
|
342
|
+
@re = PROP_RE ## (re)use prop setup for now - why? why not?
|
343
|
+
tokens << [:PROP_REFEREE, m[:key]]
|
344
|
+
elsif ['goals'].include?( key.downcase )
|
345
|
+
@re = PROP_GOAL_RE
|
346
|
+
tokens << [:PROP_GOALS, m[:key]]
|
347
|
+
else ## assume (team) line-up
|
348
|
+
@re = PROP_RE ## use LINEUP_RE ???
|
349
|
+
tokens << [:PROP, m[:key]]
|
350
|
+
end
|
333
351
|
|
334
352
|
offsets = [m.begin(0), m.end(0)]
|
335
353
|
pos = offsets[1] ## update pos
|
@@ -420,10 +438,44 @@ def _tokenize_line( line )
|
|
420
438
|
## note: racc requires pairs e.g. [:TOKEN, VAL]
|
421
439
|
## for VAL use "text" or ["text", { opts }] array
|
422
440
|
|
423
|
-
|
424
|
-
|
441
|
+
t = if @re == PROP_CARDS_RE
|
442
|
+
if m[:space] || m[:spaces]
|
443
|
+
nil ## skip space(s)
|
444
|
+
elsif m[:prop_name]
|
445
|
+
[:PROP_NAME, m[:name]]
|
446
|
+
elsif m[:minute]
|
447
|
+
minute = {}
|
448
|
+
minute[:m] = m[:value].to_i(10)
|
449
|
+
minute[:offset] = m[:value2].to_i(10) if m[:value2]
|
450
|
+
## note - for debugging keep (pass along) "literal" minute
|
451
|
+
[:MINUTE, [m[:minute], minute]]
|
452
|
+
elsif m[:sym]
|
453
|
+
sym = m[:sym]
|
454
|
+
case sym
|
455
|
+
when ',' then [:',']
|
456
|
+
when ';' then [:';']
|
457
|
+
when '-' then [:'-']
|
458
|
+
else
|
459
|
+
nil ## ignore others (e.g. brackets [])
|
460
|
+
end
|
461
|
+
else
|
462
|
+
## report error
|
463
|
+
puts "!!! TOKENIZE ERROR (PROP_CARDS_RE) - no match found"
|
464
|
+
nil
|
465
|
+
end
|
466
|
+
elsif @re == PROP_RE ### todo/fix - change to LINEUP_RE !!!!
|
425
467
|
if m[:space] || m[:spaces]
|
426
468
|
nil ## skip space(s)
|
469
|
+
elsif m[:prop_key] ## check for inline prop keys
|
470
|
+
key = m[:key]
|
471
|
+
## supported for now coach/trainer (add manager?)
|
472
|
+
if ['coach',
|
473
|
+
'trainer'].include?( key.downcase )
|
474
|
+
[:COACH, m[:key]] ## use COACH_KEY or such - why? why not?
|
475
|
+
else
|
476
|
+
## report error - for unknown (inline) prop key in lineup
|
477
|
+
nil
|
478
|
+
end
|
427
479
|
elsif m[:prop_name]
|
428
480
|
if m[:name] == 'Y'
|
429
481
|
[:YELLOW_CARD, m[:name]]
|
@@ -451,11 +503,6 @@ def _tokenize_line( line )
|
|
451
503
|
when '(' then [:'(']
|
452
504
|
when ')' then [:')']
|
453
505
|
when '-' then [:'-']
|
454
|
-
# when '.' then
|
455
|
-
# ## switch back to top-level mode!!
|
456
|
-
# puts " LEAVE PROP_RE MODE, BACK TO TOP_LEVEL/RE" if debug?
|
457
|
-
# @re = RE
|
458
|
-
# [:'.']
|
459
506
|
else
|
460
507
|
nil ## ignore others (e.g. brackets [])
|
461
508
|
end
|
@@ -464,7 +511,7 @@ def _tokenize_line( line )
|
|
464
511
|
puts "!!! TOKENIZE ERROR (PROP_RE) - no match found"
|
465
512
|
nil
|
466
513
|
end
|
467
|
-
elsif @re == GOAL_RE
|
514
|
+
elsif @re == GOAL_RE || @re == PROP_GOAL_RE
|
468
515
|
if m[:space] || m[:spaces]
|
469
516
|
nil ## skip space(s)
|
470
517
|
elsif m[:prop_name] ## note - change prop_name to player
|
@@ -660,11 +707,16 @@ def _tokenize_line( line )
|
|
660
707
|
end
|
661
708
|
|
662
709
|
|
710
|
+
if @re == GOAL_RE ### ALWAYS switch back to top level mode
|
711
|
+
puts " LEAVE GOAL_RE MODE, BACK TO TOP_LEVEL/RE" if debug?
|
712
|
+
@re = RE
|
713
|
+
end
|
714
|
+
|
663
715
|
##
|
664
716
|
## if in prop mode continue if last token is [,-]
|
665
717
|
## otherwise change back to "standard" mode
|
666
|
-
if @re == PROP_RE
|
667
|
-
if [:',', :'-'].include?( tokens[-1][0] )
|
718
|
+
if @re == PROP_RE || @re == PROP_CARDS_RE || @re == PROP_GOAL_RE
|
719
|
+
if [:',', :'-', :';'].include?( tokens[-1][0] )
|
668
720
|
## continue/stay in PROP_RE mode
|
669
721
|
## todo/check - auto-add PROP_CONT token or such
|
670
722
|
## to help parser with possible NEWLINE
|
@@ -678,11 +730,6 @@ def _tokenize_line( line )
|
|
678
730
|
end
|
679
731
|
end
|
680
732
|
|
681
|
-
|
682
|
-
if @re == GOAL_RE ### ALWAYS switch back to top level mode
|
683
|
-
puts " LEAVE GOAL_RE MODE, BACK TO TOP_LEVEL/RE" if debug?
|
684
|
-
@re = RE
|
685
|
-
end
|
686
733
|
|
687
734
|
[tokens,errors]
|
688
735
|
end
|