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 +1 -1
- data/lib/sfp/Sfplib.rb +2 -2
- data/lib/sfp/sas_translator.rb +154 -62
- metadata +16 -20
- checksums.yaml +0 -7
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
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
|
-
(@
|
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
|
-
(@
|
208
|
+
(@type.nil? ? "$.Unknown" : "$.Unknown.#{@type}")
|
209
209
|
end
|
210
210
|
end
|
211
211
|
|
data/lib/sfp/sas_translator.rb
CHANGED
@@ -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
|
-
|
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'])
|
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
|
-
|
688
|
-
|
689
|
-
|
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.
|
1996
|
-
raise TranslationException if line[-1] == ' '
|
1997
|
-
|
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.
|
2004
|
-
raise TranslationException if line[-1] == ' '
|
2005
|
-
|
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,
|
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.
|
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-
|
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:
|
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:
|
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:
|
88
|
+
rubygems_version: 1.8.11
|
93
89
|
signing_key:
|
94
|
-
specification_version:
|
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
|