sportdb-parser 0.5.7 → 0.5.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -8,13 +8,15 @@ class RaccMatchParser
8
8
  def initialize( txt, debug: false )
9
9
  ## puts "==> txt:"
10
10
  ## puts txt
11
-
12
- parser = SportDb::Parser.new
11
+
12
+ @tree = []
13
+ @errors = []
14
+
13
15
  ### todo:
14
16
  ## - pass along debug flag
15
- ## - use tokenize_with_errors and add/collect tokenize errors
16
-
17
- @tokens = parser.tokenize( txt )
17
+ lexer = SportDb::Lexer.new( txt )
18
+ ## note - use tokenize_with_errors and add/collect tokenize errors
19
+ @tokens, @errors = lexer.tokenize_with_errors
18
20
  ## pp @tokens
19
21
 
20
22
  ## quick hack - convert to racc format single char literal tokens e.g. '@' etc.
@@ -49,19 +51,30 @@ def initialize( txt, debug: false )
49
51
  # puts "Parse error on token: #{error_token_id}, value: #{error_value}"
50
52
  # end
51
53
 
52
- def parse
54
+ def parse_with_errors
53
55
  trace( "start parse:" )
54
- @tree = []
55
56
  do_parse
56
- @tree
57
+ [@tree, @errors]
58
+ end
59
+
60
+ def parse ## convenience shortcut (ignores errors)
61
+ tree, _ = parse_with_errors
62
+ tree
57
63
  end
58
64
 
59
65
 
60
- def on_error(*args)
66
+ attr_reader :errors
67
+ def errors?() @errors.size > 0; end
68
+
69
+
70
+ def on_error(error_token_id, error_value, value_stack)
71
+ args = [error_token_id, error_value, value_stack]
61
72
  puts
62
73
  puts "!! on parse error:"
63
74
  puts "args=#{args.pretty_inspect}"
64
- exit 1 ## exit for now - get and print more info about context etc.!!
75
+
76
+ @errors << "parse error on token: #{error_token_id} with value: #{error_value}, stack: #{value_stack.pretty_inspect}"
77
+ ## exit 1 ## exit for now - get and print more info about context etc.!!
65
78
  end
66
79
 
67
80
 
@@ -66,7 +66,7 @@ RoundDef = Struct.new( :name, :date, :duration ) do
66
66
  printer.text( "<RoundDef " )
67
67
  printer.text( self.name )
68
68
  printer.text( " date=" + self.date.pretty_inspect ) if date
69
- printer.text( " durattion=" + self.duration.pretty_inspect ) if duration
69
+ printer.text( " duration=" + self.duration.pretty_inspect ) if duration
70
70
  printer.text( ">" )
71
71
  end
72
72
  end
@@ -1,5 +1,5 @@
1
1
  module SportDb
2
- class Parser
2
+ class Lexer
3
3
 
4
4
 
5
5
 
@@ -297,6 +297,6 @@ DURATION_RE = Regexp.union(
297
297
 
298
298
 
299
299
 
300
- end # class Parser
300
+ end # class Lexer
301
301
  end # module SportDb
302
302
 
@@ -1,5 +1,5 @@
1
1
  module SportDb
2
- class Parser
2
+ class Lexer
3
3
 
4
4
 
5
5
  ## todo/check: use ‹› (unicode chars) to mark optional parts in regex constant name - why? why not?
@@ -130,5 +130,5 @@ SCORE_RE = Regexp.union(
130
130
  SCORE__FT_HT__RE, # e.g. 1-1 (1-0) or 1-1 -- note - must go last!!!
131
131
  )
132
132
 
133
- end # class Parser
133
+ end # class Lexer
134
134
  end # module SportDb
@@ -1,5 +1,5 @@
1
1
  module SportDb
2
- class Parser
2
+ class Lexer
3
3
 
4
4
  ## (match) status
5
5
  ## note: english usage - cancelled (in UK), canceled (in US)
@@ -40,6 +40,6 @@ STATUS_RE = %r{
40
40
  }ix
41
41
 
42
42
 
43
- end # class Parser
43
+ end # class Lexer
44
44
  end # module SportDb
45
45
 
@@ -1,5 +1,5 @@
1
1
  module SportDb
2
- class Parser
2
+ class Lexer
3
3
 
4
4
 
5
5
  ## note - do NOT allow single alpha text for now
@@ -129,5 +129,5 @@ TEXT_RE = %r{
129
129
  }ix
130
130
 
131
131
 
132
- end # class Parser
132
+ end # class Lexer
133
133
  end # module SportDb
@@ -1,7 +1,7 @@
1
1
 
2
2
 
3
3
  module SportDb
4
- class Parser
4
+ class Lexer
5
5
 
6
6
 
7
7
  ##
@@ -265,5 +265,5 @@ RE = Regexp.union( PROP_KEY_RE, ## start with prop key (match will/should swit
265
265
  TEXT_RE )
266
266
 
267
267
 
268
- end # class Parser
268
+ end # class Lexer
269
269
  end # module SportDb
@@ -4,7 +4,7 @@ module SportDb
4
4
  module Parser
5
5
  MAJOR = 0 ## todo: namespace inside version or something - why? why not??
6
6
  MINOR = 5
7
- PATCH = 7
7
+ PATCH = 8
8
8
  VERSION = [MAJOR,MINOR,PATCH].join('.')
9
9
 
10
10
  def self.version
@@ -22,7 +22,7 @@ require_relative 'parser/token-date'
22
22
  require_relative 'parser/token-text'
23
23
  require_relative 'parser/token-status'
24
24
  require_relative 'parser/token'
25
- require_relative 'parser/tokenizer'
25
+ require_relative 'parser/lexer'
26
26
 
27
27
  require_relative 'parser/parser' ## auto-generated by racc (from parser.y)
28
28
  require_relative 'parser/racc_parser'
@@ -46,18 +46,37 @@ end # module SportDb
46
46
 
47
47
 
48
48
  module SportDb
49
- ###
50
- ## todo/fix - use LangHelper or such
51
- ## e.g. class Parser
52
- ## include LangHelper
53
- ## end
54
49
  class Parser
55
- ## keep "old" access to checking for group, round & friends
56
- ## for now for compatibility
57
- def is_group?( text ) Lang.is_group?( text ); end
58
- def is_round?( text ) Lang.is_round?( text ); end
59
- def is_leg?( text ) Lang.is_leg?( text ); end
60
- end
50
+ ####################
51
+ # "default" lexer & parser (wraps RaccMatchParser)
52
+
53
+ def tokenize_with_errors( lines, debug: false )
54
+ lexer = Lexer.new( lines )
55
+ tokens, errors = lexer.tokenize_with_errors
56
+ [tokens, errors]
57
+ end
58
+
59
+ ### convience helper - ignore errors by default
60
+ def tokenize( lines, debug: false )
61
+ tokens, _ = tokenize_with_errors( lines, debug: debug )
62
+ tokens
63
+ end
64
+
65
+
66
+ def parse_with_errors( lines, debug: false )
67
+ ## todo/check - if lines needs to chack for array of lines and such
68
+ ## or handled by tokenizer???
69
+ parser = RaccMatchParser.new( lines )
70
+ tree, errors = parser.parse_with_errors
71
+ [tree, errors]
72
+ end
73
+
74
+ ### convience helper - ignore errors by default
75
+ def parse( lines, debug: false )
76
+ tree, _ = parse_with_errors( lines, debug: debug )
77
+ tree
78
+ end
79
+ end # class Parser
61
80
  end # module SportDb
62
81
 
63
82
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sportdb-parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.7
4
+ version: 0.5.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-01-22 00:00:00.000000000 Z
11
+ date: 2025-01-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cocos
@@ -97,6 +97,7 @@ files:
97
97
  - config/rounds_pt.txt
98
98
  - lib/sportdb/parser.rb
99
99
  - lib/sportdb/parser/lang.rb
100
+ - lib/sportdb/parser/lexer.rb
100
101
  - lib/sportdb/parser/parser.rb
101
102
  - lib/sportdb/parser/racc_parser.rb
102
103
  - lib/sportdb/parser/racc_tree.rb
@@ -105,7 +106,6 @@ files:
105
106
  - lib/sportdb/parser/token-status.rb
106
107
  - lib/sportdb/parser/token-text.rb
107
108
  - lib/sportdb/parser/token.rb
108
- - lib/sportdb/parser/tokenizer.rb
109
109
  - lib/sportdb/parser/version.rb
110
110
  homepage: https://github.com/sportdb/sport.db
111
111
  licenses: