sfp 0.3.19 → 0.3.21

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.19
1
+ 0.3.21
data/lib/sfp/Sfplib.rb CHANGED
@@ -185,7 +185,7 @@ module Sfp
185
185
  end
186
186
 
187
187
  def to_s
188
- (@path.nil? ? "<sfp::undefined[#{@type}]>" : "<sfp::undefined[#{@type}][#{@path}]>")
188
+ (@type.nil? ? "$.Undefined" : "$.Undefined.#{@type}")
189
189
  end
190
190
  end
191
191
 
@@ -205,7 +205,7 @@ module Sfp
205
205
  end
206
206
 
207
207
  def to_s
208
- (@path.nil? ? "<sfp::unknown[#{@type}]>" : "<sfp::unknown[#{@type}][#{@path}]]>")
208
+ (@type.nil? ? "$.Unknown" : "$.Unknown.#{@type}")
209
209
  end
210
210
  end
211
211
 
@@ -630,6 +630,63 @@ module Sfp
630
630
  self.to_s
631
631
  end
632
632
 
633
+ def dump(stream)
634
+ init = @root['initial']
635
+
636
+ # version
637
+ stream.write "begin_version\n3\nend_version\n"
638
+ # metric
639
+ stream.write "begin_metric\n1\nend_metric\n"
640
+
641
+ ### use symbolic as key in map of variables
642
+ vars = {}
643
+ @variables.each { |k,v| vars[k.to_sym] = v }
644
+ names = vars.keys
645
+
646
+ # variables
647
+ stream.write "#{names.length}\n"
648
+ names.sort!
649
+ names.each_index do |i|
650
+ var = vars[ names[i] ]
651
+ var.id = i
652
+ var.dump(stream, init)
653
+ end
654
+
655
+ # mutex
656
+ stream.write "0\n"
657
+
658
+ # initial & goal state
659
+ stream.write "begin_state\n"
660
+ goal = ''
661
+ goal_count = 0
662
+ names.each do |name|
663
+ var = vars[name]
664
+ if var.init.is_a?(Hash) and var.init.isnull
665
+ stream.write "0\n"
666
+ elsif var.init.is_a?(::Sfp::Unknown)
667
+ stream.write "#{var.length - 1}\n"
668
+ else
669
+ val = var.index(var.init).to_s
670
+ raise TranslationException, "Unknown init: #{var.name}=#{var.init.inspect}" if val.length <= 0
671
+ stream.write "#{val}\n"
672
+ end
673
+
674
+ if var.goal != nil
675
+ goal << "#{var.id} #{var.index(var.goal)}\n"
676
+ goal_count += 1
677
+ end
678
+ end
679
+ stream.write "end_state\nbegin_goal\n#{goal_count}\n#{goal}end_goal\n"
680
+
681
+ # operators
682
+ operators = @operators.values.select { |op| op.total_preposts > 0 }
683
+ stream.write "#{operators.length}\n"
684
+ operators.each { |operator| operator.dump(stream, init, vars) }
685
+
686
+ # axioms
687
+ stream.write "0"
688
+ end
689
+
633
690
  def sas
634
691
  # version
635
692
  out = "begin_version\n3\nend_version\n"
@@ -638,10 +695,9 @@ module Sfp
638
695
 
639
696
  benchmarks = {}
640
697
 
698
+ ### use symbolic as key in map of variables
641
699
  vars = {}
642
- benchmarks[:conversion] = Benchmark.measure do
643
- @variables.each { |k,v| vars[k.to_sym] = v }
644
- end
700
+ @variables.each { |k,v| vars[k.to_sym] = v }
645
701
  names = vars.keys
646
702
 
647
703
  # variables
@@ -650,7 +706,7 @@ module Sfp
650
706
  names.each_index do |i|
651
707
  var = vars[ names[i] ]
652
708
  var.id = i
653
- out << var.to_sas(@root['initial']) + "\n"
709
+ out << var.to_sas(@root['initial'])
654
710
  end
655
711
 
656
712
  # mutex
@@ -684,9 +740,11 @@ module Sfp
684
740
  total = 0
685
741
  @operators.each_value do |operator|
686
742
  next if operator.total_preposts <= 0
687
- ops << operator.to_sas2(@root['initial'], vars)
688
- ops << "\n"
689
- total += 1
743
+ sas = operator.to_sas(@root['initial'], vars)
744
+ if not sas.nil?
745
+ ops << sas
746
+ total += 1
747
+ end
690
748
  end
691
749
  out << "#{total}\n"
692
750
  out << ops
@@ -1835,7 +1893,17 @@ module Sfp
1835
1893
  v = '"' + v + '"' if v.is_a?(String)
1836
1894
  sas << (v.is_a?(Hash) ? (v.isnull ? "null\n" : "#{v.ref}\n") : "#{v}\n")
1837
1895
  }
1838
- sas << "end_variable"
1896
+ sas << "end_variable\n"
1897
+ end
1898
+
1899
+ def dump(stream, root)
1900
+ stream.write "begin_variable\nvar_#{@id}#{@name}\n#{@layer}\n#{self.length}\n"
1901
+ self.each { |v|
1902
+ v = root.at?(v) if v.is_a?(String) and v.isref
1903
+ v = '"' + v + '"' if v.is_a?(String)
1904
+ stream.write (v.is_a?(Hash) ? (v.isnull ? "null\n" : "#{v.ref}\n") : "#{v}\n")
1905
+ }
1906
+ stream.write "end_variable\n"
1839
1907
  end
1840
1908
 
1841
1909
  def not(x)
@@ -1954,34 +2022,6 @@ module Sfp
1954
2022
  end
1955
2023
 
1956
2024
  def to_sas(root, variables)
1957
- prevail = Array.new
1958
- prepost = Array.new
1959
- self.each_value { |p|
1960
- if p.post == nil
1961
- prevail << p
1962
- else
1963
- prepost << p
1964
- end
1965
- }
1966
- sas = "begin_operator\n#{@name}"
1967
- @params.each { |k,v| sas << " #{k}=#{v}" if k != '$.this' } if @params != nil
1968
- sas << "\n#{prevail.length}\n"
1969
- prevail.each { |p|
1970
- line = p.to_sas(root, variables)
1971
- raise TranslationException if line[line.length-1] == ' '
1972
- sas << "#{line}\n"
1973
- }
1974
- sas << "#{prepost.length}\n"
1975
- prepost.each { |p|
1976
- line = p.to_sas(root, variables, false)
1977
- raise TranslationException if line[line.length-1] == ' '
1978
- sas << "#{line}\n"
1979
- }
1980
- sas << "#{@cost}\nend_operator"
1981
- return sas
1982
- end
1983
-
1984
- def to_sas2(root, variables)
1985
2025
  prevails = self.values.select { |p| p.post.nil? }
1986
2026
  preposts = self.values.select { |p| not p.post.nil? }
1987
2027
 
@@ -1992,21 +2032,59 @@ module Sfp
1992
2032
 
1993
2033
  sas << "\n#{prevails.length}\n"
1994
2034
  prevails.each do |p|
1995
- line = p.to_sas2(root, variables)
1996
- raise TranslationException if line[-1] == ' '
1997
- sas << line
1998
- sas << "\n"
2035
+ line = p.to_sas(root, variables)
2036
+ #raise TranslationException if line[-1] == ' '
2037
+ return nil if line[-1] == ' '
2038
+ sas << "#{line}\n"
1999
2039
  end
2000
2040
 
2001
2041
  sas << "#{preposts.length}\n"
2002
2042
  preposts.each do |p|
2003
- line = p.to_sas2(root, variables, false)
2004
- raise TranslationException if line[-1] == ' '
2005
- sas << line
2006
- sas << "\n"
2043
+ line = p.to_sas(root, variables, false)
2044
+ #raise TranslationException if line[-1] == ' '
2045
+ return nil if line[-1] == ' '
2046
+ sas << "#{line}\n"
2007
2047
  end
2008
2048
 
2009
- sas << "#{@cost}\nend_operator"
2049
+ sas << "#{@cost}\nend_operator\n"
2050
+ end
2051
+
2052
+ def dump(stream, root, variables)
2053
+ prevails = self.values.select { |p| p.post.nil? }
2054
+ preposts = self.values.select { |p| not p.post.nil? }
2055
+ =begin
2056
+ pre_lines = []
2057
+ prevails.each do |p|
2058
+ line = p.to_sas(root, variables)
2059
+ return if line[-1] == ' '
2060
+ pre_lines << line
2061
+ end
2062
+ prepost_lines = []
2063
+ preposts.each do |p|
2064
+ line = p.to_sas(root, variables, false)
2065
+ return if line [-1] == ' '
2066
+ prepost_lines << line
2067
+ end
2068
+ =end
2069
+
2070
+ stream.write "begin_operator\n#{@name}"
2071
+ @params.each do |key,val|
2072
+ stream.write " #{key}=#{val}" if key != '$.this'
2073
+ end if @params.is_a?(Hash)
2074
+
2075
+ =begin
2076
+ stream.write "\n#{pre_lines.length}"
2077
+ stream.write "\n#{pre_lines.join("\n")}" if pre_lines.length > 0
2078
+ stream.write "\n#{prepost_lines.length}\n"
2079
+ stream.write "#{prepost_lines.join("\n")}\n" if prepost_lines.length > 0
2080
+ =end
2081
+ stream.write "\n#{prevails.length}\n"
2082
+ prevails.each { |p| p.dump(stream, root, variables) }
2083
+
2084
+ stream.write "#{preposts.length}\n"
2085
+ preposts.each { |p| p.dump(stream, root, variables, false) }
2086
+
2087
+ stream.write "#{@cost}\nend_operator\n"
2010
2088
  end
2011
2089
 
2012
2090
  def to_sfw
@@ -2093,23 +2171,7 @@ module Sfp
2093
2171
  return Parameter.new(@var, @pre, @post)
2094
2172
  end
2095
2173
 
2096
- def to_sas(root, variables, prevail=true)
2097
- # resolve the reference
2098
- #pre = ( (@pre.is_a?(String) and @pre.isref) ? root.at?(@pre) : @pre )
2099
- #post = ( (@post.is_a?(String) and @post.isref) ? root.at?(@post) : @post )
2100
- pre = ((@pre.is_a?(String) and @pre.isref) ? variables[@pre].init : @pre)
2101
- post = ((@post.is_a?(String) and @post.isref) ? variables[@post].init : @post)
2102
- # calculate the index
2103
- pre = ( (pre.is_a?(Hash) and pre.isnull) ? 0 : (pre == nil ? -1 : @var.index(pre)) )
2104
- post = ( (post.is_a?(Hash) and post.isnull) ? 0 : @var.index(post) )
2105
-
2106
- raise Exception, self.to_s if not prevail and post.nil?
2107
-
2108
- return "#{@var.id} #{pre}" if post.nil?
2109
- return "0 #{@var.id} #{pre} #{post}"
2110
- end
2111
-
2112
- def to_sas2(root, variables, is_prevail=true)
2174
+ def to_sas(root, variables, is_prevail=true)
2113
2175
  ### resolve reference
2114
2176
  pre = ((@pre.is_a?(String) and @pre.isref) ? variables[@pre.to_sym].init : @pre)
2115
2177
  ### calculate index
@@ -2132,6 +2194,36 @@ module Sfp
2132
2194
  end
2133
2195
  end
2134
2196
 
2197
+ def dump(stream, root, variables, is_prevail=true)
2198
+ ### resolve reference
2199
+ pre = ((@pre.is_a?(String) and @pre.isref) ? variables[@pre.to_sym].init : @pre)
2200
+ ### calculate index
2201
+ if pre.is_a?(Hash) and pre.isnull
2202
+ pre = 0
2203
+ elsif pre.nil?
2204
+ pre = -1
2205
+ else
2206
+ pre = @var.index(pre)
2207
+ end
2208
+
2209
+ line = nil
2210
+ if is_prevail
2211
+ line = "#{@var.id} #{pre}\n"
2212
+ else
2213
+ ### resolve reference
2214
+ post = ((@post.is_a?(String) and @post.isref) ? variables[@post.to_sym].init : @post)
2215
+ ### calculate index
2216
+ if post.is_a?(Hash) and post.isnull
2217
+ line = "0 #{@var.id} #{pre} 0\n"
2218
+ else
2219
+ line = "0 #{@var.id} #{pre} #{@var.index(post)}\n"
2220
+ end
2221
+ end
2222
+
2223
+ raise TranslationException if line[-2] == ' '
2224
+ stream.write line
2225
+ end
2226
+
2135
2227
  def to_s
2136
2228
  return @var.name + ',' +
2137
2229
  (@pre == nil ? '-' : (@pre.is_a?(Hash) ? @pre.tostring : @pre.to_s)) + ',' +
metadata CHANGED
@@ -1,43 +1,38 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sfp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.19
4
+ version: 0.3.21
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Herry
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2013-11-20 00:00:00.000000000 Z
12
+ date: 2013-11-27 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: antlr3
15
- requirement: !ruby/object:Gem::Requirement
16
+ requirement: &6642880 !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
19
  - - ~>
18
20
  - !ruby/object:Gem::Version
19
21
  version: 1.10.0
20
22
  type: :runtime
21
23
  prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ~>
25
- - !ruby/object:Gem::Version
26
- version: 1.10.0
24
+ version_requirements: *6642880
27
25
  - !ruby/object:Gem::Dependency
28
26
  name: rake
29
- requirement: !ruby/object:Gem::Requirement
27
+ requirement: &6642360 !ruby/object:Gem::Requirement
28
+ none: false
30
29
  requirements:
31
- - - '>='
30
+ - - ! '>='
32
31
  - !ruby/object:Gem::Version
33
32
  version: '0'
34
33
  type: :development
35
34
  prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - '>='
39
- - !ruby/object:Gem::Version
40
- version: '0'
35
+ version_requirements: *6642360
41
36
  description: A Ruby API and script for SFP language parser
42
37
  email: herry13@gmail.com
43
38
  executables:
@@ -72,25 +67,26 @@ files:
72
67
  homepage: https://github.com/herry13/sfp-ruby
73
68
  licenses:
74
69
  - BSD
75
- metadata: {}
76
70
  post_install_message:
77
71
  rdoc_options: []
78
72
  require_paths:
79
73
  - lib
80
74
  required_ruby_version: !ruby/object:Gem::Requirement
75
+ none: false
81
76
  requirements:
82
- - - '>='
77
+ - - ! '>='
83
78
  - !ruby/object:Gem::Version
84
79
  version: '0'
85
80
  required_rubygems_version: !ruby/object:Gem::Requirement
81
+ none: false
86
82
  requirements:
87
- - - '>='
83
+ - - ! '>='
88
84
  - !ruby/object:Gem::Version
89
85
  version: '0'
90
86
  requirements: []
91
87
  rubyforge_project: sfp
92
- rubygems_version: 2.1.10
88
+ rubygems_version: 1.8.11
93
89
  signing_key:
94
- specification_version: 4
90
+ specification_version: 3
95
91
  summary: SFP Parser
96
92
  test_files: []
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: ca049ea19fd6ff1ee58312bdd03bdefa3358e342
4
- data.tar.gz: d6808887e1039d2e75f5360491d9584b5e842cb0
5
- SHA512:
6
- metadata.gz: be71d391cc8d77de2fec90208d31d232643eebe216e0677eb7641d0cc0ff5d4c8e8bb5fc435cf5f230d884ca8f5964337c760cb757ffa82381098fb736d2ba2f
7
- data.tar.gz: b1394aabf249f510ebb843a4228299a4ed1028419e10f86054924a200c3b3507b82a8494e9d14b616664c89666e1745d4777e10d46a341d7a2fb83f3c8eb223c