srl_ruby 0.3.3 → 0.3.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5d359b7fdd648df4b9e77e0bf64266b3fec2d474
4
- data.tar.gz: 7a8a1efb3f978b8f45b15c47c0b457a6109daf37
3
+ metadata.gz: 75b3f62195385724cef744d9d066001cacb56da7
4
+ data.tar.gz: c987288da96445ada26f5b115e1b9e64e5062fbb
5
5
  SHA512:
6
- metadata.gz: 20c7d24104afefa0371692ca2f0713916b9a6edbc1825c32bb77ff1c29760fa46bd04731ab88914f8dbd1d97f1cbd523f8b5e765d57ad0cf9ea7938110161c95
7
- data.tar.gz: 9110435c0ae7bf089c167a46c81f6aabe91a7f9d52926843654972877aef2ccc1838c5a5218e8eac1f628cf95328f1f044a62b9d1fc4cfbcc6db49752b24b9ee
6
+ metadata.gz: 288976a2ff3ce17282af5c74385c84ccd8a318626c773a6c567953e9937f9ef7c146af941646a7f426fea08b2072c88d2385dd1a13ed7b217e38dd7400a4cbb7
7
+ data.tar.gz: 2321788937a965131c417acdb731d7d5a1278790cd2e2933b5e163296272acb2a526d0add3fc080041836b2ba1224f11429fd2c65055b30c072fcc58cb8c35b6
data/.rubocop.yml CHANGED
@@ -1,31 +1,189 @@
1
1
  AllCops:
2
2
  Exclude:
3
- - 'exp/**/*'
3
+ - 'exp/**/*'
4
+
5
+ Layout/CaseIndentation:
6
+ Enabled: false
7
+
8
+ Layout/CommentIndentation:
9
+ Enabled: false
10
+
11
+ Layout/ElseAlignment:
12
+ Enabled: false
13
+
14
+ Layout/EmptyLines:
15
+ Enabled: false
16
+
17
+ Layout/EndAlignment:
18
+ Enabled: false
4
19
 
5
20
  Layout/EndOfLine:
6
21
  Enabled: true
7
22
  EnforcedStyle: lf
8
-
23
+
24
+ Layout/IndentationWidth:
25
+ Enabled: false
26
+
27
+ Layout/IndentationConsistency:
28
+ Enabled: false
29
+
30
+ Layout/MultilineHashBraceLayout:
31
+ Enabled: false
32
+
33
+ Layout/SpaceAroundOperators:
34
+ Enabled: false
35
+
36
+ Layout/SpaceInsideParens:
37
+ Enabled: false
38
+
39
+ Layout/Tab:
40
+ Enabled: true
41
+
42
+ Layout/TrailingBlankLines:
43
+ Enabled: false
44
+
45
+ Layout/TrailingWhitespace:
46
+ Enabled: false
47
+
48
+ Lint/Loop:
49
+ Enabled: false
50
+
51
+ Lint/RescueException:
52
+ Enabled: false
53
+
54
+ Lint/UnusedMethodArgument:
55
+ Enabled: false
56
+
57
+ Lint/UselessAccessModifier:
58
+ Enabled: false
59
+
60
+ Lint/Void:
61
+ Enabled: false
62
+
63
+ Lint/UselessAssignment:
64
+ Enabled: false
65
+
66
+ Metrics/AbcSize:
67
+ Enabled: false
68
+
9
69
  Metrics/BlockLength:
10
70
  Enabled: true
11
71
  Max: 300
12
-
72
+
73
+ Metrics/ClassLength:
74
+ Enabled: true
75
+ Max: 300
76
+
77
+ Metrics/CyclomaticComplexity:
78
+ Enabled: false
79
+
80
+ Metrics/LineLength:
81
+ Enabled: false
82
+ Max: 90
83
+
13
84
  Metrics/MethodLength:
14
85
  Enabled: true
15
- Max: 30
16
-
86
+ Max: 40
87
+
17
88
  Metrics/ModuleLength:
18
89
  Enabled: true
19
90
  Max: 500
20
-
91
+
92
+ Metrics/PerceivedComplexity:
93
+ Enabled: false
94
+
21
95
  Naming/ConstantName:
22
96
  Enabled: false
97
+
98
+ Naming/ClassAndModuleCamelCase:
99
+ Enabled: false
23
100
 
24
- Naming/VariableName:
101
+ Naming/UncommunicativeBlockParamName:
25
102
  Enabled: false
26
103
 
104
+ Naming/UncommunicativeMethodParamName:
105
+ Enabled: false
106
+
107
+ Naming/VariableName:
108
+ Enabled: false
109
+
110
+ Style/Alias:
111
+ Enabled: false
112
+
113
+ Layout/AlignHash:
114
+ Enabled: false
115
+
116
+ Style/AsciiComments:
117
+ Enabled: false
118
+
119
+ Style/BarePercentLiterals:
120
+ Enabled: false
121
+
122
+ Style/BlockComments:
123
+ Enabled: false
124
+
125
+ Style/CharacterLiteral:
126
+ Enabled: false
127
+
128
+ Style/ClassCheck:
129
+ Enabled: false
130
+
131
+ Style/ClassVars:
132
+ Enabled: false
133
+
134
+ Style/ColonMethodCall:
135
+ Enabled: false
136
+
137
+ Style/CommentAnnotation:
138
+ Enabled: false
139
+
27
140
  Style/CommentedKeyword:
28
141
  Enabled: false
29
-
142
+
143
+ Style/ConditionalAssignment:
144
+ Enabled: false
145
+
146
+ Style/DefWithParentheses:
147
+ Enabled: false
148
+
149
+ Style/Documentation:
150
+ Enabled: false
151
+
152
+ Style/ExpandPathArguments:
153
+ Enabled: false
154
+
155
+ Style/GuardClause:
156
+ Enabled: false
157
+
158
+ Style/IfUnlessModifier:
159
+ Enabled: false
160
+
161
+ Style/InverseMethods:
162
+ Enabled: false
163
+
164
+ Style/Next:
165
+ Enabled: false
166
+
167
+ Style/RaiseArgs:
168
+ Enabled: true
169
+
30
170
  Style/RedundantReturn:
31
- Enabled: false
171
+ Enabled: false
172
+
173
+ Style/RedundantSelf:
174
+ Enabled: true
175
+
176
+ Style/RegexpLiteral:
177
+ Enabled: false
178
+
179
+ Style/PercentLiteralDelimiters:
180
+ Enabled: false
181
+
182
+ Style/StringLiterals:
183
+ Enabled: false
184
+
185
+ Style/TernaryParentheses:
186
+ Enabled: false
187
+
188
+ Style/UnlessElse:
189
+ Enabled: false
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## [0.3.4] - 2018-04-20
2
+
3
+ ### Fixed
4
+ - Method `Tokenizer#_next_token` failed to recognize digit or integer value immediately followed by a comma
5
+
1
6
  ## [0.3.3] - 2018-04-19
2
7
  ### Changed
3
8
  - Binary `srl_ruby` now accepts a SRL filename as command-line argument. Command-line documentation updated.
@@ -125,10 +125,10 @@ module Regex # This module is used as a namespace
125
125
  def ==(other)
126
126
  result = case other
127
127
  when Character
128
- self.to_str == other.to_str
128
+ to_str == other.to_str
129
129
 
130
130
  when Integer
131
- self.codepoint == other
131
+ codepoint == other
132
132
 
133
133
  when String
134
134
  other.size > 1 ? false : to_str == other
@@ -4,7 +4,7 @@ module Regex # This module is used as a namespace
4
4
  # A raw expression is a string that will be copied verbatim (as is)
5
5
  # in the generated regular expression.
6
6
  class RawExpression < AtomicExpression
7
- attr_reader :raw
7
+ attr_reader :raw
8
8
 
9
9
  # Constructor
10
10
  def initialize(rawLiteral)
@@ -16,7 +16,7 @@ module Regex # This module is used as a namespace
16
16
 
17
17
  # Conversion method re-definition.
18
18
  # Purpose: Return the String representation of the expression.
19
- alias_method :text_repr, :raw
19
+ alias_method :text_repr, :raw
20
20
  end # class
21
21
  end # module
22
22
 
@@ -5,6 +5,8 @@ require_relative 'srl_token'
5
5
 
6
6
 
7
7
  module SrlRuby
8
+ # A tokenizer for the Simple Regex Language.
9
+ # Responsibility: break input SRL into a sequence of token objects.
8
10
  # The tokenizer should recognize:
9
11
  # Keywords: as, capture, letter
10
12
  # Integer literals including single digit
@@ -86,6 +88,8 @@ module SrlRuby
86
88
 
87
89
  class ScanError < StandardError; end
88
90
 
91
+ # Constructor. Initialize a tokenizer for SRL.
92
+ # @param srl_source [String] SRL text to tokenize.
89
93
  def initialize(source)
90
94
  @scanner = StringScanner.new(source)
91
95
  @lineno = 1
@@ -114,10 +118,10 @@ module SrlRuby
114
118
  if '(),'.include? curr_ch
115
119
  # Delimiters, separators => single character token
116
120
  token = build_token(@@lexeme2name[curr_ch], scanner.getch)
117
- elsif (lexeme = scanner.scan(/[0-9]{2,}((?=\s)|$)/))
121
+ elsif (lexeme = scanner.scan(/[0-9]{2,}((?=\s|,)|$)/))
118
122
  token = build_token('INTEGER', lexeme) # An integer has 2..* digits
119
- elsif (lexeme = scanner.scan(/[0-9]((?=\s)|$)/))
120
- token = build_token('DIGIT_LIT', lexeme)
123
+ elsif (lexeme = scanner.scan(/[0-9]((?=\s|,)|$)/))
124
+ token = build_token('DIGIT_LIT', lexeme)
121
125
  elsif (lexeme = scanner.scan(/"(?:\\"|[^"])*"/)) # Double quotes literal?
122
126
  unquoted = lexeme.gsub(/(^")|("$)/, '')
123
127
  token = build_token('STRING_LIT', unquoted)
@@ -136,7 +140,7 @@ module SrlRuby
136
140
  erroneous = curr_ch.nil? ? '' : scanner.scan(/./)
137
141
  sequel = scanner.scan(/.{1,20}/)
138
142
  erroneous += sequel unless sequel.nil?
139
- raise ScanError.new("Unknown token #{erroneous} on line #{lineno}")
143
+ raise ScanError, "Unknown token #{erroneous} on line #{lineno}"
140
144
  end
141
145
 
142
146
  return token
@@ -1,3 +1,3 @@
1
1
  module SrlRuby
2
- VERSION = '0.3.3'.freeze
2
+ VERSION = '0.3.4'.freeze
3
3
  end
@@ -94,7 +94,7 @@ module Acceptance
94
94
  erroneous = curr_ch.nil? ? '' : curr_ch
95
95
  sequel = scanner.scan(/.{1,20}/)
96
96
  erroneous += sequel unless sequel.nil?
97
- raise ScanError.new("Unknown token #{erroneous}")
97
+ raise ScanError, "Unknown token #{erroneous}"
98
98
  end
99
99
 
100
100
  return token
@@ -1,166 +1,170 @@
1
- # File: character_spec.rb
2
- require_relative '../spec_helper' # Use the RSpec test framework
3
- require_relative '../../lib/regex/character'
4
-
5
- module Regex # Open this namespace, to get rid of scope qualifiers
6
- describe Character do
7
- # This constant holds an arbitrary selection of characters
8
- SampleChars = [?a, ?\0, ?\u0107].freeze
9
-
10
- # This constant holds the codepoints of the character selection
11
- SampleInts = [0x61, 0, 0x0107].freeze
12
-
13
- # This constant holds an arbitrary selection of two characters (digrams)
14
- # escape sequences
15
- SampleDigrams = %w[\n \e \0 \6 \k].freeze
16
-
17
- # This constant holds an arbitrary selection of escaped octal
18
- # or hexadecimal literals
19
- SampleNumEscs = %w[\0 \07 \x07 \xa \x0F \u03a3 \u{a}].freeze
20
-
21
- before(:all) do
22
- # Ensure that the set of codepoints is mapping the set of chars...
23
- expect(SampleChars.map(&:ord)).to eq(SampleInts)
24
- end
25
-
26
- context 'Creation & initialization' do
27
- it 'should be created with a with an integer value (codepoint) or...' do
28
- SampleInts.each do |aCodepoint|
29
- expect { Character.new(aCodepoint) }.not_to raise_error
30
- end
31
- end
32
-
33
- it '...could be created with a single character String or...' do
34
- SampleChars.each do |aChar|
35
- expect { Character.new(aChar) }.not_to raise_error
36
- end
37
- end
38
-
39
- it '...could be created with an escape sequence' do
40
- # Case 1: escape sequence is a digram
41
- SampleDigrams.each do |anEscapeSeq|
42
- expect { Character.new(anEscapeSeq) }.not_to raise_error
43
- end
44
-
45
- # Case 2: escape sequence is an escaped octal or hexadecimal literal
46
- SampleNumEscs.each do |anEscapeSeq|
47
- expect { Character.new(anEscapeSeq) }.not_to raise_error
48
- end
49
- end
50
- end # context
51
-
52
- context 'Provided services' do
53
- it 'Should know its lexeme if created from a string' do
54
- # Lexeme is defined when the character was initialised from a text
55
- SampleChars.each do |aChar|
56
- ch = Character.new(aChar)
57
- expect(ch.lexeme).to eq(aChar)
58
- end
59
- end
60
-
61
- it 'Should not know its lexeme representation from a codepoint' do
62
- SampleInts.each do |aChar|
63
- ch = Character.new(aChar)
64
- expect(ch.lexeme).to be_nil
65
- end
66
- end
67
-
68
- it 'should know its String representation' do
69
- # Try for one character
70
- newOne = Character.new(?\u03a3)
71
- expect(newOne.char).to eq('Σ')
72
- expect(newOne.to_str).to eq("\u03A3")
73
-
74
- # Try with our chars sample
75
- SampleChars.each { |aChar| Character.new(aChar).to_str == aChar }
76
-
77
- # Try with our codepoint sample
78
- mapped_chars = SampleInts.map do |aCodepoint|
79
- Character.new(aCodepoint).char
80
- end
81
- expect(mapped_chars).to eq(SampleChars)
82
-
83
- # Try with our escape sequence samples
84
- (SampleDigrams + SampleNumEscs).each do |anEscSeq|
85
- expectation = String.class_eval(%Q|"#{anEscSeq}"|, __FILE__, __LINE__)
86
- Character.new(anEscSeq).to_str == expectation
87
- end
88
- end
89
-
90
- it 'should know its codepoint' do
91
- # Try for one character
92
- newOne = Character.new(?\u03a3)
93
- expect(newOne.codepoint).to eq(0x03a3)
94
-
95
- # Try with our chars sample
96
- allCodepoints = SampleChars.map do |aChar|
97
- Character.new(aChar).codepoint
98
- end
99
- expect(allCodepoints).to eq(SampleInts)
100
-
101
- # Try with our codepoint sample
102
- mapped_chars = SampleInts.each do |aCodepoint|
103
- expect(Character.new(aCodepoint).codepoint).to eq(aCodepoint)
104
- end
105
-
106
- # Try with our escape sequence samples
107
- (SampleDigrams + SampleNumEscs).each do |anEscSeq|
108
- expectation = String.class_eval(%Q|"#{anEscSeq}".ord()|, __FILE__, __LINE__)
109
- expect(Character.new(anEscSeq).codepoint).to eq(expectation)
110
- end
111
- end
112
-
113
- it 'should known whether it is equal to another Object' do
114
- newOne = Character.new(?\u03a3)
115
-
116
- # Case 1: test equality with itself
117
- expect(newOne).to eq(newOne)
118
-
119
- # Case 2: test equality with another Character
120
- expect(newOne).to eq(Character.new(?\u03a3))
121
- expect(newOne).not_to eq(Character.new(?\u0333))
122
-
123
- # Case 3: test equality with an integer value
124
- # (equality based on codepoint value)
125
- expect(newOne).to eq(0x03a3)
126
- expect(newOne).not_to eq(0x0333)
127
-
128
- # Case 4: test equality with a single-character String
129
- expect(newOne).to eq(?\u03a3)
130
- expect(newOne).not_to eq(?\u0333)
131
-
132
- # Case 5: test fails with multiple character strings
133
- expect(newOne).not_to eq('03a3')
134
-
135
- # Case 6: equality testing with arbitray object
136
- expect(newOne).not_to eq(nil)
137
- expect(newOne).not_to eq(Object.new)
138
-
139
- # In case 6, equality is based on to_s method.
140
- simulator = double('fake')
141
- expect(simulator).to receive(:to_s).and_return(?\u03a3)
142
- expect(newOne).to eq(simulator)
143
-
144
- # Create a module that re-defines the existing to_s method
145
- module Tweak_to_s
146
- def to_s() # Overwrite the existing to_s method
147
- return ?\u03a3
148
- end
149
- end # module
150
- weird = Object.new
151
- weird.extend(Tweak_to_s)
152
- expect(newOne).to eq(weird)
153
- end
154
-
155
- it 'should know its readable description' do
156
- ch1 = Character.new('a')
157
- expect(ch1.explain).to eq("the character 'a'")
158
-
159
- ch2 = Character.new(?\u03a3)
160
- expect(ch2.explain).to eq("the character '\u03a3'")
161
- end
162
- end # context
163
- end # describe
164
- end # module
165
-
166
- # End of file
1
+ # File: character_spec.rb
2
+ require_relative '../spec_helper' # Use the RSpec test framework
3
+ require_relative '../../lib/regex/character'
4
+
5
+ module Regex # Open this namespace, to get rid of scope qualifiers
6
+ describe Character do
7
+ # This constant holds an arbitrary selection of characters
8
+ SampleChars = [?a, ?\0, ?\u0107].freeze
9
+
10
+ # This constant holds the codepoints of the character selection
11
+ SampleInts = [0x61, 0, 0x0107].freeze
12
+
13
+ # This constant holds an arbitrary selection of two characters (digrams)
14
+ # escape sequences
15
+ SampleDigrams = %w[\n \e \0 \6 \k].freeze
16
+
17
+ # This constant holds an arbitrary selection of escaped octal
18
+ # or hexadecimal literals
19
+ SampleNumEscs = %w[\0 \07 \x07 \xa \x0F \u03a3 \u{a}].freeze
20
+
21
+ before(:all) do
22
+ # Ensure that the set of codepoints is mapping the set of chars...
23
+ expect(SampleChars.map(&:ord)).to eq(SampleInts)
24
+ end
25
+
26
+ context 'Creation & initialization' do
27
+ it 'should be created with a with an integer value (codepoint) or...' do
28
+ SampleInts.each do |aCodepoint|
29
+ expect { Character.new(aCodepoint) }.not_to raise_error
30
+ end
31
+ end
32
+
33
+ it '...could be created with a single character String or...' do
34
+ SampleChars.each do |aChar|
35
+ expect { Character.new(aChar) }.not_to raise_error
36
+ end
37
+ end
38
+
39
+ it '...could be created with an escape sequence' do
40
+ # Case 1: escape sequence is a digram
41
+ SampleDigrams.each do |anEscapeSeq|
42
+ expect { Character.new(anEscapeSeq) }.not_to raise_error
43
+ end
44
+
45
+ # Case 2: escape sequence is an escaped octal or hexadecimal literal
46
+ SampleNumEscs.each do |anEscapeSeq|
47
+ expect { Character.new(anEscapeSeq) }.not_to raise_error
48
+ end
49
+ end
50
+ end # context
51
+
52
+ context 'Provided services' do
53
+ it 'Should know its lexeme if created from a string' do
54
+ # Lexeme is defined when the character was initialised from a text
55
+ SampleChars.each do |aChar|
56
+ ch = Character.new(aChar)
57
+ expect(ch.lexeme).to eq(aChar)
58
+ end
59
+ end
60
+
61
+ it 'Should not know its lexeme representation from a codepoint' do
62
+ SampleInts.each do |aChar|
63
+ ch = Character.new(aChar)
64
+ expect(ch.lexeme).to be_nil
65
+ end
66
+ end
67
+
68
+ it 'should know its String representation' do
69
+ # Try for one character
70
+ newOne = Character.new(?\u03a3)
71
+ expect(newOne.char).to eq('Σ')
72
+ expect(newOne.to_str).to eq("\u03A3")
73
+
74
+ # Try with our chars sample
75
+ SampleChars.each do |aChar|
76
+ new_ch = Character.new(aChar).to_str
77
+ new_ch == aChar
78
+ end
79
+
80
+ # Try with our codepoint sample
81
+ mapped_chars = SampleInts.map do |aCodepoint|
82
+ Character.new(aCodepoint).char
83
+ end
84
+ expect(mapped_chars).to eq(SampleChars)
85
+
86
+ # Try with our escape sequence samples
87
+ (SampleDigrams + SampleNumEscs).each do |anEscSeq|
88
+ expectation = String.class_eval(%Q|"#{anEscSeq}"|, __FILE__, __LINE__)
89
+ new_ch = Character.new(anEscSeq).to_str
90
+ new_ch == expectation
91
+ end
92
+ end
93
+
94
+ it 'should know its codepoint' do
95
+ # Try for one character
96
+ newOne = Character.new(?\u03a3)
97
+ expect(newOne.codepoint).to eq(0x03a3)
98
+
99
+ # Try with our chars sample
100
+ allCodepoints = SampleChars.map do |aChar|
101
+ Character.new(aChar).codepoint
102
+ end
103
+ expect(allCodepoints).to eq(SampleInts)
104
+
105
+ # Try with our codepoint sample
106
+ mapped_chars = SampleInts.each do |aCodepoint|
107
+ expect(Character.new(aCodepoint).codepoint).to eq(aCodepoint)
108
+ end
109
+
110
+ # Try with our escape sequence samples
111
+ (SampleDigrams + SampleNumEscs).each do |anEscSeq|
112
+ expectation = String.class_eval(%Q|"#{anEscSeq}".ord()|, __FILE__, __LINE__)
113
+ expect(Character.new(anEscSeq).codepoint).to eq(expectation)
114
+ end
115
+ end
116
+
117
+ it 'should known whether it is equal to another Object' do
118
+ newOne = Character.new(?\u03a3)
119
+
120
+ # Case 1: test equality with itself
121
+ expect(newOne).to eq(newOne)
122
+
123
+ # Case 2: test equality with another Character
124
+ expect(newOne).to eq(Character.new(?\u03a3))
125
+ expect(newOne).not_to eq(Character.new(?\u0333))
126
+
127
+ # Case 3: test equality with an integer value
128
+ # (equality based on codepoint value)
129
+ expect(newOne).to eq(0x03a3)
130
+ expect(newOne).not_to eq(0x0333)
131
+
132
+ # Case 4: test equality with a single-character String
133
+ expect(newOne).to eq(?\u03a3)
134
+ expect(newOne).not_to eq(?\u0333)
135
+
136
+ # Case 5: test fails with multiple character strings
137
+ expect(newOne).not_to eq('03a3')
138
+
139
+ # Case 6: equality testing with arbitray object
140
+ expect(newOne).not_to eq(nil)
141
+ expect(newOne).not_to eq(Object.new)
142
+
143
+ # In case 6, equality is based on to_s method.
144
+ simulator = double('fake')
145
+ expect(simulator).to receive(:to_s).and_return(?\u03a3)
146
+ expect(newOne).to eq(simulator)
147
+
148
+ # Create a module that re-defines the existing to_s method
149
+ module Tweak_to_s
150
+ def to_s() # Overwrite the existing to_s method
151
+ return ?\u03a3
152
+ end
153
+ end # module
154
+ weird = Object.new
155
+ weird.extend(Tweak_to_s)
156
+ expect(newOne).to eq(weird)
157
+ end
158
+
159
+ it 'should know its readable description' do
160
+ ch1 = Character.new('a')
161
+ expect(ch1.explain).to eq("the character 'a'")
162
+
163
+ ch2 = Character.new(?\u03a3)
164
+ expect(ch2.explain).to eq("the character '\u03a3'")
165
+ end
166
+ end # context
167
+ end # describe
168
+ end # module
169
+
170
+ # End of file
@@ -82,6 +82,19 @@ module SrlRuby
82
82
  ]
83
83
  match_expectations(subject, expectations)
84
84
  end
85
+
86
+ it "should recognize 'letter from ... to ... followed by comma'" do
87
+ input = 'letter a to f,'
88
+ subject.scanner.string = input
89
+ expectations = [
90
+ %w[LETTER letter],
91
+ %w[LETTER_LIT a],
92
+ %w[TO to],
93
+ %w[LETTER_LIT f],
94
+ %w[COMMA ,]
95
+ ]
96
+ match_expectations(subject, expectations)
97
+ end
85
98
  end # context
86
99
 
87
100
  context 'Quantifier tokenization:' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: srl_ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dimitri Geshef
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-19 00:00:00.000000000 Z
11
+ date: 2018-04-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rley