rhcl 0.0.3 → 0.0.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: 7912283f77ce4f133e772641e1b258bc77bddadd
4
- data.tar.gz: 2747ad96ebb024b9534ecd3d54b23d669cb14df5
3
+ metadata.gz: 9c2dfad2b024f0251ae293e7f15b77690731bb82
4
+ data.tar.gz: 5836cb027e5aab9c42e51b9e7e1b547757397302
5
5
  SHA512:
6
- metadata.gz: 8f2567babef26dd87c6aed2335419cfccf7a75f4a7cab6e4d2a80e595e15fee51709ed49f0a5e5d7433fdeb0814481e37aaafe56004d405fd9de667adba22b9a
7
- data.tar.gz: a8f8da9aa5a07a54e4609efbc3d2e68110535cb8c34dfbed488fb80af3d5ab5e25f5b0127415c79e2d66f2f063c6e3b27a430d81addb7cd65492fb9433a60b4b
6
+ metadata.gz: 66e61c3536485733c666deb6cb245d4e52fdac00f87b01fd645a7f2c5515e384e9b64061ab154265ac14eb5ebaf015a2e74f84170dc3f9740e95beff52f6848e
7
+ data.tar.gz: 9f8636fdf14f6be1f39d53a51e0f0f469b01db9dc5bfdce3a3ec2c9e8f5ad652c163be149ed3e03a4d83ceb7252dcf58f854fc154ee1c1710544265a3ee53c12
@@ -21,81 +21,74 @@ end
21
21
 
22
22
  def scan
23
23
  tok = nil
24
- @prev_tokens = []
24
+ @backup = []
25
25
 
26
26
  until @ss.eos?
27
- if (tok = @ss.scan /\s+/)
27
+ if (tok = backup { @ss.scan /\s+/ })
28
28
  # nothing to do
29
- elsif (tok = @ss.scan(/#/))
30
- @prev_tokens << tok
31
- @prev_tokens << @ss.scan_until(/\n/)
32
- tok = ''
33
- elsif (tok = @ss.scan(%r|/|))
34
- @prev_tokens << tok
35
-
36
- case (tok = @ss.getch)
29
+ elsif (tok = backup { @ss.scan /#/ })
30
+ backup { @ss.scan_until /\n/ }
31
+ elsif (tok = backup { @ss.scan %r|/| })
32
+ case (tok = backup { @ss.getch })
37
33
  when '/'
38
- @prev_tokens << tok
39
- @prev_tokens << @ss.scan_until(/(\n|\z)/)
34
+ backup { @ss.scan_until /(\n|\z)/ }
40
35
  when '*'
41
- @prev_tokens << tok
42
36
  nested = 1
43
37
 
44
38
  until nested.zero?
45
- case (tok = @ss.scan_until(%r{(/\*|\*/|\z)}))
39
+ case (tok = backup { @ss.scan_until %r{(/\*|\*/|\z)} })
46
40
  when %r|/\*\z|
47
- @prev_tokens << tok
48
41
  nested += 1
49
42
  when %r|\*/\z|
50
- @prev_tokens << tok
51
43
  nested -= 1
52
44
  else
53
- @prev_tokens << tok
54
45
  break
55
46
  end
56
47
  end
57
48
  else
58
- raise "comment expected, got '#{tok}'"
49
+ raise "comment expected, got #{tok.inspect}"
59
50
  end
60
-
61
- tok = ''
62
- elsif (tok = @ss.scan(/-?\d+\.\d+/))
51
+ elsif (tok = backup { @ss.scan /-?\d+\.\d+/ })
63
52
  yield [:FLOAT, tok.to_f]
64
- elsif (tok = @ss.scan(/-?\d+/))
53
+ elsif (tok = backup { @ss.scan /-?\d+/ })
65
54
  yield [:INTEGER, tok.to_i]
66
- elsif (tok = @ss.scan(/,/))
55
+ elsif (tok = backup { @ss.scan /,/ })
67
56
  yield [:COMMA, tok]
68
- elsif (tok = @ss.scan(/\=/))
57
+ elsif (tok = backup { @ss.scan /\=/ })
69
58
  yield [:EQUAL, tok]
70
- elsif (tok = @ss.scan(/\[/))
59
+ elsif (tok = backup { @ss.scan /\[/ })
71
60
  yield [:LEFTBRACKET, tok]
72
- elsif (tok = @ss.scan(/\]/))
61
+ elsif (tok = backup { @ss.scan /\]/ })
73
62
  yield [:RIGHTBRACKET, tok]
74
- elsif (tok = @ss.scan(/\{/))
63
+ elsif (tok = backup { @ss.scan /\{/ })
75
64
  yield [:LEFTBRACE, tok]
76
- elsif (tok = @ss.scan(/\}/))
65
+ elsif (tok = backup { @ss.scan /\}/ })
77
66
  yield [:RIGHTBRACE, tok]
78
- elsif (tok = @ss.scan(/"/))
79
- yield [:STRING, (@ss.scan_until(/("|\z)/) || '').sub(/"\z/, '')]
67
+ elsif (tok = backup { @ss.scan /"/ })
68
+ yield [:STRING, (backup { @ss.scan_until /("|\z)/ } || '').sub(/"\z/, '')]
80
69
  else
81
- tok = (@ss.scan_until(/(\s|\z)/) || '').sub(/\s\z/, '')
70
+ identifier = (backup { @ss.scan_until /(\s|\z)/ } || '').sub(/\s\z/, '')
82
71
  token_type = :IDENTIFIER
83
72
 
84
- if ['true', 'false'].include?(tok)
85
- tok = !!(tok =~ /true/)
73
+ if ['true', 'false'].include?(identifier)
74
+ identifier = !!(identifier =~ /true/)
86
75
  token_type = :BOOL
87
76
  end
88
77
 
89
- yield [token_type, tok]
78
+ yield [token_type, identifier]
90
79
  end
91
-
92
- @prev_tokens << tok
93
80
  end
94
81
 
95
82
  yield [false, '$end']
96
83
  end
97
84
  private :scan
98
85
 
86
+ def backup
87
+ tok = yield
88
+ @backup << tok if tok
89
+ return tok
90
+ end
91
+
99
92
  def parse
100
93
  yyparse self, :scan
101
94
  end
@@ -106,9 +99,17 @@ end
106
99
 
107
100
  def raise_error(error_value)
108
101
  header = "parse error on value: #{error_value}\n"
109
- prev = (@prev_tokens || [])
102
+ error_value = @backup.pop
103
+
104
+ if error_value =~ /\n\z/
105
+ error_value = '__' + error_value.chomp + "__\n"
106
+ else
107
+ error_value = '__' + error_value + '__'
108
+ end
109
+
110
+ prev = (@backup || [])
110
111
  prev = prev.empty? ? '' : prev.join + ' '
111
- errmsg = prev + "__#{error_value}__"
112
+ errmsg = prev + error_value
112
113
 
113
114
  if @ss and @ss.rest?
114
115
  errmsg << ' ' + @ss.rest
@@ -112,81 +112,74 @@ end
112
112
 
113
113
  def scan
114
114
  tok = nil
115
- @prev_tokens = []
115
+ @backup = []
116
116
 
117
117
  until @ss.eos?
118
- if (tok = @ss.scan /\s+/)
118
+ if (tok = backup { @ss.scan /\s+/ })
119
119
  # nothing to do
120
- elsif (tok = @ss.scan(/#/))
121
- @prev_tokens << tok
122
- @prev_tokens << @ss.scan_until(/\n/)
123
- tok = ''
124
- elsif (tok = @ss.scan(%r|/|))
125
- @prev_tokens << tok
126
-
127
- case (tok = @ss.getch)
120
+ elsif (tok = backup { @ss.scan /#/ })
121
+ backup { @ss.scan_until /\n/ }
122
+ elsif (tok = backup { @ss.scan %r|/| })
123
+ case (tok = backup { @ss.getch })
128
124
  when '/'
129
- @prev_tokens << tok
130
- @prev_tokens << @ss.scan_until(/(\n|\z)/)
125
+ backup { @ss.scan_until /(\n|\z)/ }
131
126
  when '*'
132
- @prev_tokens << tok
133
127
  nested = 1
134
128
 
135
129
  until nested.zero?
136
- case (tok = @ss.scan_until(%r{(/\*|\*/|\z)}))
130
+ case (tok = backup { @ss.scan_until %r{(/\*|\*/|\z)} })
137
131
  when %r|/\*\z|
138
- @prev_tokens << tok
139
132
  nested += 1
140
133
  when %r|\*/\z|
141
- @prev_tokens << tok
142
134
  nested -= 1
143
135
  else
144
- @prev_tokens << tok
145
136
  break
146
137
  end
147
138
  end
148
139
  else
149
- raise "comment expected, got '#{tok}'"
140
+ raise "comment expected, got #{tok.inspect}"
150
141
  end
151
-
152
- tok = ''
153
- elsif (tok = @ss.scan(/-?\d+\.\d+/))
142
+ elsif (tok = backup { @ss.scan /-?\d+\.\d+/ })
154
143
  yield [:FLOAT, tok.to_f]
155
- elsif (tok = @ss.scan(/-?\d+/))
144
+ elsif (tok = backup { @ss.scan /-?\d+/ })
156
145
  yield [:INTEGER, tok.to_i]
157
- elsif (tok = @ss.scan(/,/))
146
+ elsif (tok = backup { @ss.scan /,/ })
158
147
  yield [:COMMA, tok]
159
- elsif (tok = @ss.scan(/\=/))
148
+ elsif (tok = backup { @ss.scan /\=/ })
160
149
  yield [:EQUAL, tok]
161
- elsif (tok = @ss.scan(/\[/))
150
+ elsif (tok = backup { @ss.scan /\[/ })
162
151
  yield [:LEFTBRACKET, tok]
163
- elsif (tok = @ss.scan(/\]/))
152
+ elsif (tok = backup { @ss.scan /\]/ })
164
153
  yield [:RIGHTBRACKET, tok]
165
- elsif (tok = @ss.scan(/\{/))
154
+ elsif (tok = backup { @ss.scan /\{/ })
166
155
  yield [:LEFTBRACE, tok]
167
- elsif (tok = @ss.scan(/\}/))
156
+ elsif (tok = backup { @ss.scan /\}/ })
168
157
  yield [:RIGHTBRACE, tok]
169
- elsif (tok = @ss.scan(/"/))
170
- yield [:STRING, (@ss.scan_until(/("|\z)/) || '').sub(/"\z/, '')]
158
+ elsif (tok = backup { @ss.scan /"/ })
159
+ yield [:STRING, (backup { @ss.scan_until /("|\z)/ } || '').sub(/"\z/, '')]
171
160
  else
172
- tok = (@ss.scan_until(/(\s|\z)/) || '').sub(/\s\z/, '')
161
+ identifier = (backup { @ss.scan_until /(\s|\z)/ } || '').sub(/\s\z/, '')
173
162
  token_type = :IDENTIFIER
174
163
 
175
- if ['true', 'false'].include?(tok)
176
- tok = !!(tok =~ /true/)
164
+ if ['true', 'false'].include?(identifier)
165
+ identifier = !!(identifier =~ /true/)
177
166
  token_type = :BOOL
178
167
  end
179
168
 
180
- yield [token_type, tok]
169
+ yield [token_type, identifier]
181
170
  end
182
-
183
- @prev_tokens << tok
184
171
  end
185
172
 
186
173
  yield [false, '$end']
187
174
  end
188
175
  private :scan
189
176
 
177
+ def backup
178
+ tok = yield
179
+ @backup << tok if tok
180
+ return tok
181
+ end
182
+
190
183
  def parse
191
184
  yyparse self, :scan
192
185
  end
@@ -197,9 +190,17 @@ end
197
190
 
198
191
  def raise_error(error_value)
199
192
  header = "parse error on value: #{error_value}\n"
200
- prev = (@prev_tokens || [])
193
+ error_value = @backup.pop
194
+
195
+ if error_value =~ /\n\z/
196
+ error_value = '__' + error_value.chomp + "__\n"
197
+ else
198
+ error_value = '__' + error_value + '__'
199
+ end
200
+
201
+ prev = (@backup || [])
201
202
  prev = prev.empty? ? '' : prev.join + ' '
202
- errmsg = prev + "__#{error_value}__"
203
+ errmsg = prev + error_value
203
204
 
204
205
  if @ss and @ss.rest?
205
206
  errmsg << ' ' + @ss.rest
@@ -1,3 +1,3 @@
1
1
  module Rhcl
2
- VERSION = '0.0.3'
2
+ VERSION = '0.0.4'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rhcl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genki Sugawara