sfp 0.3.19 → 0.3.21

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.
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