rubyang 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -442,6 +442,14 @@ rule
442
442
  {
443
443
  result = [val[0]]
444
444
  }
445
+ | "fraction-digits-stmt" "range-stmt"
446
+ {
447
+ result = [val[0], val[1]]
448
+ }
449
+ | "range-stmt" "fraction-digits-stmt"
450
+ {
451
+ result = [val[1], val[0]]
452
+ }
445
453
 
446
454
  "fraction-digits-stmt" : "fraction-digits-keyword" "fraction-digits-arg-str" "stmtend"
447
455
  {
@@ -1433,7 +1441,7 @@ rule
1433
1441
 
1434
1442
  "integer-value" : "string"
1435
1443
  {
1436
- unless /^[1-9][0-9]*$/ =~ val[0]
1444
+ unless /^[0-9]|[1-9][0-9]+$/ =~ val[0]
1437
1445
  raise ParseError, "bad integer-value, but '#{val[0]}'"
1438
1446
  end
1439
1447
  result = val[0]
@@ -129,18 +129,22 @@ module Rubyang
129
129
 
130
130
  scanre = Regexp.union( scanre_list.map{ |scanre| scanre[1] } )
131
131
 
132
+ next_to_kw = false
132
133
  until s.eos?
133
134
  token = s.scan( scanre )
134
135
  #p token
135
136
  case token
136
- when scanres["slcomment"] then ;
137
- when scanres["blcomment"] then ;
137
+ when scanres["slcomment"] then
138
+ ;
139
+ when scanres["blcomment"] then
140
+ ;
138
141
  when scanres["dqstr"] then
139
142
  token_ = token.gsub(/^"/,'').gsub(/"$/,'').gsub(/\\n/,"\n").gsub(/\\t/,"\t").gsub(/\\"/,"\"").gsub(/\\\\/,"\\")
140
143
  #if 0 == (token_ =~ URI.regexp)
141
144
  #@tokens.push [:URI, token_]
142
145
  #else
143
146
  @tokens.push [:STRING, token_]
147
+ next_to_kw = false
144
148
  #end
145
149
  when scanres["sqstr"] then
146
150
  token_ = token.gsub(/^'/,'').gsub(/'$/,'')
@@ -149,24 +153,50 @@ module Rubyang
149
153
  #else @tokens.push [:STRING, token_]
150
154
  #end
151
155
  @tokens.push [:STRING, token_]
156
+ next_to_kw = false
152
157
  when scanres["nqstr"] then
153
- case token
154
- when *(keywords.values) then @tokens.push [keywords.key(token), token]
155
- else @tokens.push [:STRING, token]
158
+ if (! next_to_kw) and keywords.values.include?(token)
159
+ @tokens.push [keywords.key(token), token]
160
+ next_to_kw = true
161
+ else
162
+ @tokens.push [:STRING, token]
163
+ next_to_kw = false
156
164
  end
157
- when scanres["+"] then @tokens.push ["+", token]
158
- when scanres[";"] then @tokens.push [";", token]
159
- when scanres[":"] then @tokens.push [":", token]
160
- when scanres["/"] then @tokens.push ["/", token]
161
- when scanres["|"] then @tokens.push ["|", token]
162
- when scanres[".."] then @tokens.push ["..", token]
163
- when scanres["="] then @tokens.push ["=", token]
164
- when scanres["{"] then @tokens.push ["{", token]
165
- when scanres["}"] then @tokens.push ["}", token]
166
- when scanres["wsp"] then ;#@tokens.push [:WSP, token]
167
- when scanres["newline"] then ;#@tokens.push [:NEWLINE, token]
168
- when scanres["return"] then ;#@tokens.push [:RETURN, token]
169
- else raise "token not match to any scanres: #{token.inspect}"
165
+ when scanres["+"] then
166
+ @tokens.push ["+", token]
167
+ next_to_kw = false
168
+ when scanres[";"] then
169
+ @tokens.push [";", token]
170
+ next_to_kw = false
171
+ when scanres[":"] then
172
+ @tokens.push [":", token]
173
+ next_to_kw = false
174
+ when scanres["/"] then
175
+ @tokens.push ["/", token]
176
+ next_to_kw = false
177
+ when scanres["|"] then
178
+ @tokens.push ["|", token]
179
+ next_to_kw = false
180
+ when scanres[".."] then
181
+ @tokens.push ["..", token]
182
+ next_to_kw = false
183
+ when scanres["="] then
184
+ @tokens.push ["=", token]
185
+ next_to_kw = false
186
+ when scanres["{"] then
187
+ @tokens.push ["{", token]
188
+ next_to_kw = false
189
+ when scanres["}"] then
190
+ @tokens.push ["}", token]
191
+ next_to_kw = false
192
+ when scanres["wsp"] then
193
+ ; #@tokens.push [:WSP, token]
194
+ when scanres["newline"] then
195
+ ; #@tokens.push [:NEWLINE, token]
196
+ when scanres["return"] then
197
+ ; #@tokens.push [:RETURN, token]
198
+ else
199
+ raise "token not match to any scanres: #{token.inspect}"
170
200
  end
171
201
  end
172
202
 
data/lib/rubyang/model.rb CHANGED
@@ -62,7 +62,7 @@ module Rubyang
62
62
  }
63
63
  # raise if received susstatements does not satisfy defined substatements' cardinality
64
64
  self.substatements.each{ |k, v|
65
- unless v.include? substmts.select{ |s| StmtMap.find( s ).intern == k }.size
65
+ unless v.include? substmts.count{ |s| StmtMap.find( s ).intern == k }
66
66
  raise ArgumentError, "substatement #{StmtMap.find( k )} is not in #{self.class} #{k}'s cardinality"
67
67
  end
68
68
  }
@@ -74,6 +74,13 @@ module Rubyang
74
74
  }
75
75
  @substmts = substmts
76
76
  end
77
+ def to_s parent=true
78
+ head, vars, tail = "#<#{self.class.to_s}:0x#{(self.object_id << 1).to_s(16).rjust(14,'0')} ", Array.new, ">"
79
+ if parent
80
+ vars.push "@substmts=#{@substmts.map{|s| s.to_s(false)}}"
81
+ end
82
+ head + vars.join(', ') + tail
83
+ end
77
84
  def substmt substmt, strict: false
78
85
  raise TypeError unless String === substmt
79
86
  if strict
@@ -141,6 +148,14 @@ module Rubyang
141
148
  raise ArgumentError, "Invalid Argument: '#{arg}'"
142
149
  end
143
150
  end
151
+ def to_s parent=true
152
+ head, vars, tail = "#<#{self.class.to_s}:0x#{(self.object_id << 1).to_s(16).rjust(14,'0')} ", Array.new, ">"
153
+ if parent
154
+ vars.push "@arg=#{@arg.to_s}"
155
+ vars.push "@substmts=#{@substmts.map{|s| s.to_s(false)}}"
156
+ end
157
+ head + vars.join(', ') + tail
158
+ end
144
159
  def arg
145
160
  @arg
146
161
  end
@@ -1,3 +1,3 @@
1
1
  module Rubyang
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end