sfp 0.3.10 → 0.3.11

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/lib/sfp/Sfplib.rb CHANGED
@@ -13,6 +13,13 @@ module Sfp
13
13
  @conformant = false
14
14
  end
15
15
 
16
+ def finalize
17
+ @root.keys.each { |k|
18
+ next if k[0,1] == '_' or !@root[k].is_a?(Hash)
19
+ @root.delete(k) if @root[k]['_context'] == 'abstract'
20
+ }
21
+ end
22
+
16
23
  def next_id
17
24
  nid = "c#{@constraint_next_id}"
18
25
  @constraint_next_id += 1
data/src/SfpLang.g CHANGED
@@ -37,37 +37,19 @@ TODO:
37
37
  }
38
38
 
39
39
  sfp
40
- : { self.init }
40
+ : { self.init }
41
41
  NL*
42
- //{ self.expand_classes }
43
- ( (object_def | state | constraints) NL* | include | class_def | procedure )*
44
- // | goal_constraint | composite)*
42
+ ( (object_def | abstract_object | state | constraint_def | class_def | procedure) NL*
43
+ | include )*
44
+ { self.finalize }
45
45
  ;
46
46
 
47
- constraints
47
+ constraint_def
48
48
  : goal_constraint
49
49
  | global_constraint
50
50
  | sometime_constraint
51
51
  ;
52
52
 
53
- /*mmutation
54
- : reference equals_op value NL+
55
- {
56
- path, var = $reference.val.extract
57
- parent = @now.at?(path)
58
- raise Exception, "#{path} is not a Hash" if not parent.is_a?(Hash)
59
- parent[var] = $value.val
60
- }
61
- | reference equals_op NULL
62
- {
63
- path, var = $reference.val.extract
64
- parent = @now.at?(path)
65
- raise Exception, "#{path} is not a Hash" if not parent.is_a?(Hash)
66
- parent[var] = self.null_value
67
- }
68
- ;
69
- */
70
-
71
53
  include
72
54
  : 'include' include_file NL+
73
55
  ;
@@ -77,11 +59,6 @@ include_file
77
59
  { self.process_file($STRING.text[1,$STRING.text.length-2]) }
78
60
  ;
79
61
 
80
- header
81
- : class_def
82
- | procedure
83
- ;
84
-
85
62
  state
86
63
  : ID 'state' NL*
87
64
  {
@@ -97,19 +74,6 @@ state
97
74
  { self.goto_parent(true) }
98
75
  ;
99
76
 
100
- composite
101
- : 'composite' ID
102
- {
103
- @now[$ID.text] = { '_self' => $ID.text,
104
- '_context' => 'composite',
105
- '_parent' => @now
106
- }
107
- @now = @now[$ID.text]
108
- }
109
- '{' NL* ( attribute | constraint )* '}' NL*
110
- { self.goto_parent(true) }
111
- ;
112
-
113
77
  class_def
114
78
  : ('class'|'schema') ID
115
79
  {
@@ -124,7 +88,7 @@ class_def
124
88
  @now['_extends'] = $extends_class.val
125
89
  }
126
90
  )?
127
- ('{' NL* ( attribute | procedure )* '}')? NL*
91
+ ('{' NL* ( attribute | procedure NL* )* '}')?
128
92
  {
129
93
  if not @now.has_key?('_extends')
130
94
  @now['_extends'] = '$.Object'
@@ -221,9 +185,14 @@ object_schemata
221
185
  : ',' object_schema
222
186
  ;
223
187
 
224
- object_def
188
+ abstract_object
189
+ : 'abstract' object_def
190
+ { @root[$object_def.id]['_context'] = 'abstract' }
191
+ ;
192
+
193
+ object_def returns [id]
225
194
  : { @use_template = false }
226
- ID
195
+ ID { $id = $ID.text }
227
196
  ('extends' path
228
197
  {
229
198
  template = @root.at?($path.text)
@@ -349,7 +318,7 @@ procedure
349
318
  { @now['_cost'] = $NUMBER.text.to_i }
350
319
  NL+
351
320
  )?
352
- conditions? effects '}' NL+
321
+ conditions? effects '}'
353
322
  { self.goto_parent() }
354
323
  ;
355
324
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sfp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.10
4
+ version: 0.3.11
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2013-08-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
16
- requirement: &21346840 !ruby/object:Gem::Requirement
16
+ requirement: &20563100 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 1.7.5
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *21346840
24
+ version_requirements: *20563100
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: antlr3
27
- requirement: &21345480 !ruby/object:Gem::Requirement
27
+ requirement: &20562560 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: 1.9.0
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *21345480
35
+ version_requirements: *20562560
36
36
  description: A Ruby API and script for SFP language parser
37
37
  email: herry13@gmail.com
38
38
  executables: