adsl 0.0.2
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/Gemfile +17 -0
- data/LICENSE +165 -0
- data/README.md +45 -0
- data/bin/adsl-verify +111 -0
- data/lib/ds/data_store_spec.rb +292 -0
- data/lib/fol/first_order_logic.rb +261 -0
- data/lib/parser/adsl_ast.rb +780 -0
- data/lib/parser/adsl_parser.racc +151 -0
- data/lib/parser/adsl_parser.rex +48 -0
- data/lib/parser/adsl_parser.rex.rb +196 -0
- data/lib/parser/adsl_parser.tab.rb +976 -0
- data/lib/parser/dsdl_parser.rex.rb +196 -0
- data/lib/parser/dsdl_parser.tab.rb +976 -0
- data/lib/spass/bin.rb +164 -0
- data/lib/spass/ruby_extensions.rb +25 -0
- data/lib/spass/spass_ds_extensions.rb +870 -0
- data/lib/spass/spass_translator.rb +378 -0
- data/lib/spass/util.rb +11 -0
- data/lib/util/csv_hash_formatter.rb +39 -0
- data/lib/util/test_helper.rb +33 -0
- data/lib/util/util.rb +110 -0
- metadata +185 -0
data/lib/util/util.rb
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
require 'set'
|
2
|
+
require 'open3'
|
3
|
+
require 'thread'
|
4
|
+
|
5
|
+
class String
|
6
|
+
def increment_suffix
|
7
|
+
suffix = scan(/_\d+$/).first
|
8
|
+
if suffix.nil?
|
9
|
+
return self + "_2"
|
10
|
+
else
|
11
|
+
return self[0, self.length - suffix.length] + '_' + (suffix.to_i + 1).to_s
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class Time
|
17
|
+
def self.time_execution
|
18
|
+
pre = Time.now
|
19
|
+
yield
|
20
|
+
((Time.now - pre)*1000).to_i
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def container_for(*fields, &block)
|
25
|
+
raise ArgumentError, 'Field list empty' if fields.empty?
|
26
|
+
|
27
|
+
all_fields = Set.new(fields)
|
28
|
+
if methods.include? "container_for_fields"
|
29
|
+
all_fields.merge send(:container_for_fields)
|
30
|
+
end
|
31
|
+
singleton_class = (class << self; self; end)
|
32
|
+
singleton_class.send :define_method, :container_for_fields, lambda{all_fields}
|
33
|
+
|
34
|
+
attr_accessor *fields
|
35
|
+
|
36
|
+
self.send(:define_method, :initialize) do |*options|
|
37
|
+
options = options.empty? ? {} : options[0]
|
38
|
+
options ||= {}
|
39
|
+
options_trimmed = Hash[options]
|
40
|
+
|
41
|
+
all_fields.each do |field|
|
42
|
+
instance_variable_set "@#{field}".to_sym, options_trimmed.delete(field.to_sym)
|
43
|
+
end
|
44
|
+
if block
|
45
|
+
instance_eval &block
|
46
|
+
elsif not options_trimmed.empty?
|
47
|
+
raise ArgumentError, "Undefined fields mentioned in initializer: #{options_trimmed.keys.map{ |key| ":#{key.to_s}"}.join(", ")}"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
send :define_method, :recursively_gather do |method|
|
52
|
+
to_inspect = [self]
|
53
|
+
inspected = Set[]
|
54
|
+
while not to_inspect.empty?
|
55
|
+
elem = to_inspect.pop
|
56
|
+
inspected << elem
|
57
|
+
if elem.class.methods.include? 'container_for_fields'
|
58
|
+
elem.class.container_for_fields.each do |field|
|
59
|
+
field_val = elem.send(field)
|
60
|
+
next if field_val.nil?
|
61
|
+
[field_val].flatten.each do |subval|
|
62
|
+
to_inspect << subval unless inspected.include?(subval)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
result = Set[]
|
68
|
+
inspected.each do |val|
|
69
|
+
result = result + [val.send(method)].flatten if val.class.method_defined?(method)
|
70
|
+
end
|
71
|
+
result.delete_if{ |a| a.nil? }.flatten
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
# returns stdout of the process that terminates first
|
76
|
+
# not completely thread safe; cannot be with 1.8.7
|
77
|
+
def process_race(*commands)
|
78
|
+
parent_thread = Thread.current
|
79
|
+
mutex = Mutex.new
|
80
|
+
children_threads = []
|
81
|
+
spawned_pids = []
|
82
|
+
result = nil
|
83
|
+
mutex.synchronize do
|
84
|
+
commands.each do |command|
|
85
|
+
children_threads << Thread.new do
|
86
|
+
begin
|
87
|
+
sleep 0.1
|
88
|
+
pipe = IO.popen command, 'r'
|
89
|
+
spawned_pids << pipe.pid
|
90
|
+
output = pipe.read
|
91
|
+
mutex.synchronize do
|
92
|
+
result = output if result.nil?
|
93
|
+
parent_thread.run
|
94
|
+
end
|
95
|
+
rescue => e
|
96
|
+
parent_thread.raise e unless e.message == 'die!'
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
Thread.stop
|
102
|
+
return result
|
103
|
+
ensure
|
104
|
+
children_threads.each do |child|
|
105
|
+
child.raise 'die!'
|
106
|
+
end
|
107
|
+
spawned_pids.each do |pid|
|
108
|
+
Process.kill 'HUP', pid
|
109
|
+
end
|
110
|
+
end
|
metadata
ADDED
@@ -0,0 +1,185 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: adsl
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 2
|
10
|
+
version: 0.0.2
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Ivan Bocic
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2013-03-01 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: rake
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 3
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
version: "0"
|
32
|
+
type: :development
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: test-unit
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
none: false
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
hash: 3
|
43
|
+
segments:
|
44
|
+
- 0
|
45
|
+
version: "0"
|
46
|
+
type: :development
|
47
|
+
version_requirements: *id002
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: rex
|
50
|
+
prerelease: false
|
51
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
hash: 3
|
57
|
+
segments:
|
58
|
+
- 0
|
59
|
+
version: "0"
|
60
|
+
type: :runtime
|
61
|
+
version_requirements: *id003
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: racc
|
64
|
+
prerelease: false
|
65
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
hash: 3
|
71
|
+
segments:
|
72
|
+
- 0
|
73
|
+
version: "0"
|
74
|
+
type: :runtime
|
75
|
+
version_requirements: *id004
|
76
|
+
- !ruby/object:Gem::Dependency
|
77
|
+
name: active_support
|
78
|
+
prerelease: false
|
79
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
80
|
+
none: false
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
hash: 3
|
85
|
+
segments:
|
86
|
+
- 0
|
87
|
+
version: "0"
|
88
|
+
type: :runtime
|
89
|
+
version_requirements: *id005
|
90
|
+
- !ruby/object:Gem::Dependency
|
91
|
+
name: colorize
|
92
|
+
prerelease: false
|
93
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ">="
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
hash: 3
|
99
|
+
segments:
|
100
|
+
- 0
|
101
|
+
version: "0"
|
102
|
+
type: :runtime
|
103
|
+
version_requirements: *id006
|
104
|
+
- !ruby/object:Gem::Dependency
|
105
|
+
name: i18n
|
106
|
+
prerelease: false
|
107
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
108
|
+
none: false
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
hash: 3
|
113
|
+
segments:
|
114
|
+
- 0
|
115
|
+
version: "0"
|
116
|
+
type: :runtime
|
117
|
+
version_requirements: *id007
|
118
|
+
description: ADSL parses ADSL specification, translating it into Spass for verification
|
119
|
+
email:
|
120
|
+
- bo@cs.ucsb.edu
|
121
|
+
executables:
|
122
|
+
- adsl-verify
|
123
|
+
extensions: []
|
124
|
+
|
125
|
+
extra_rdoc_files: []
|
126
|
+
|
127
|
+
files:
|
128
|
+
- bin/adsl-verify
|
129
|
+
- lib/ds/data_store_spec.rb
|
130
|
+
- lib/parser/adsl_parser.rex
|
131
|
+
- lib/parser/adsl_parser.racc
|
132
|
+
- lib/parser/dsdl_parser.rex.rb
|
133
|
+
- lib/parser/adsl_ast.rb
|
134
|
+
- lib/parser/adsl_parser.tab.rb
|
135
|
+
- lib/parser/dsdl_parser.tab.rb
|
136
|
+
- lib/parser/adsl_parser.rex.rb
|
137
|
+
- lib/util/test_helper.rb
|
138
|
+
- lib/util/csv_hash_formatter.rb
|
139
|
+
- lib/util/util.rb
|
140
|
+
- lib/spass/util.rb
|
141
|
+
- lib/spass/spass_ds_extensions.rb
|
142
|
+
- lib/spass/ruby_extensions.rb
|
143
|
+
- lib/spass/bin.rb
|
144
|
+
- lib/spass/spass_translator.rb
|
145
|
+
- lib/fol/first_order_logic.rb
|
146
|
+
- LICENSE
|
147
|
+
- README.md
|
148
|
+
- Gemfile
|
149
|
+
homepage: http://cs.ucsb.edu/~bo/adsl/
|
150
|
+
licenses: []
|
151
|
+
|
152
|
+
post_install_message:
|
153
|
+
rdoc_options: []
|
154
|
+
|
155
|
+
require_paths:
|
156
|
+
- lib
|
157
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
158
|
+
none: false
|
159
|
+
requirements:
|
160
|
+
- - ~>
|
161
|
+
- !ruby/object:Gem::Version
|
162
|
+
hash: 57
|
163
|
+
segments:
|
164
|
+
- 1
|
165
|
+
- 8
|
166
|
+
- 7
|
167
|
+
version: 1.8.7
|
168
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
hash: 3
|
174
|
+
segments:
|
175
|
+
- 0
|
176
|
+
version: "0"
|
177
|
+
requirements: []
|
178
|
+
|
179
|
+
rubyforge_project:
|
180
|
+
rubygems_version: 1.8.24
|
181
|
+
signing_key:
|
182
|
+
specification_version: 3
|
183
|
+
summary: A tool for parsing ADSL and translating it into Spass
|
184
|
+
test_files: []
|
185
|
+
|