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