tla-parser-s 0.1.2 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f9d948ffca5a15da6675b14f14e17e5181615d2b
4
- data.tar.gz: cbbb074f624f0afbc29a579bb0fe7a4afa5d3c9d
3
+ metadata.gz: 3e456bcc271a0ec3f6a7b5f71112eb11b33ae320
4
+ data.tar.gz: b4dfe0d536c58a28f9963c149d350e291583dfdd
5
5
  SHA512:
6
- metadata.gz: 502e237ae5b32370fbfe1df73231fb90f56f7659a3af762442764d6f8e7de1ae6fa578a3872379f394ecdb549aaceb5f19f345a426b81b312f422bd763c766d6
7
- data.tar.gz: f54fe71c01a2f878f322afe41c79ac1a621ecc92b599e8359c80032d48e5fadae43c1d89da9faa9bb8b10c794028669314a020487b4f8c58c971e883f7deedda
6
+ metadata.gz: 8401edf952eedba3bfc76ae0a08ffbab159dbd90481c82d48de19123bb90a9167369d01d624d16c63ed7c43956371f18ca182e9aedcfdf657ea5dab2a67f9bdf
7
+ data.tar.gz: c2e9d8063ef23e14c45f430568281f58e10b3eb6c72af478cb420828ca3eceb4443faa21e6ed0e312a012233149e3e2f0d35ad2a478ad9be22b76b171ba83eba
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
  [Up](../index.php) [Readme](README.html) [Releases](RELEASES.html) [Todo](TODO.html)
3
3
 
4
4
 
5
- # tla-parser-s - TLA+ language parser (for tla-sbuilder) - $Release:0.1.2$
5
+ # tla-parser-s - TLA+ language parser (for tla-sbuilder) - $Release:0.2.2$
6
6
 
7
7
  A Ruby library for parsing
8
8
  [TLA+ language](http://research.microsoft.com/en-us/um/people/lamport/tla/book.html).
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.2
1
+ 0.2.2
@@ -28,9 +28,9 @@ module TlaParserS
28
28
 
29
29
  # @return [String] lvalue
30
30
  def lvalue
31
- # n = recursive_select( Sexp::Root ).first
31
+ # n = recursive_select( SbuilderSexp::Root ).first
32
32
  # return nil unless n
33
- recursive_select( Sexp::Identifier ).first.node_value
33
+ recursive_select( SbuilderSexp::Identifier ).first.node_value
34
34
  end
35
35
 
36
36
 
@@ -53,7 +53,7 @@ module TlaParserS
53
53
  parser_path = File.join( base_path, 'parser_sexp.treetop')
54
54
  @logger.info( "#{__method__} loading parser from parser path #{parser_path}" )
55
55
  Treetop.load( parser_path)
56
- @@parser = SexpParser.new
56
+ @@parser = SbuilderSexpParser.new
57
57
  @@parser
58
58
  end
59
59
 
@@ -1,6 +1,6 @@
1
1
  require_relative 'lvalue'
2
2
 
3
- module Sexp
3
+ module SbuilderSexp
4
4
 
5
5
  # ------------------------------------------------------------------
6
6
  # Abstract
@@ -32,7 +32,7 @@ module Sexp
32
32
 
33
33
  # @return [Directive:array] of parses' tree nodes
34
34
  def directives
35
- recursive_select( Sexp::Directive )
35
+ recursive_select( SbuilderSexp::Directive )
36
36
  end
37
37
 
38
38
  def directive_definitions
@@ -41,18 +41,18 @@ module Sexp
41
41
 
42
42
  # @return [Callable:array] of 'Callable' tree nodes
43
43
  def callables
44
- recursive_select( Sexp::Callable )
44
+ recursive_select( SbuilderSexp::Callable )
45
45
  end
46
46
 
47
47
  # @return [array] of 'Define' tree nodes
48
48
  def defines
49
- recursive_select( Sexp::Define )
49
+ recursive_select( SbuilderSexp::Define )
50
50
  end
51
51
 
52
52
  # Snippets is main level parse target, and it adds to symbol table
53
53
  # base context entries for 'Define' nodes
54
54
  #
55
- # @return [Array] of hash with ':node_type', :value properties
55
+ # @return [Array] of hash with {:node_type, :value, :tree }
56
56
  #
57
57
  def symbol_definitions
58
58
  defines.map { |c| { :node_type => c.node_type, :value => c.name, :tree => c } }
@@ -66,7 +66,7 @@ module Sexp
66
66
  class IdentifierList <Root
67
67
 
68
68
  def identifier_nodes
69
- recursive_select( Sexp::Identifier)
69
+ recursive_select( SbuilderSexp::Identifier)
70
70
  end
71
71
  def identifiers
72
72
  identifier_nodes.map{ |r| r.value }
@@ -82,7 +82,7 @@ module Sexp
82
82
 
83
83
  class ProcVariables <IdentifierList
84
84
  def identifier_nodes
85
- recursive_select( Sexp::VariableDef).first.recursive_select( Sexp::Identifier )
85
+ recursive_select( SbuilderSexp::VariableDef).first.recursive_select( SbuilderSexp::Identifier )
86
86
  end
87
87
 
88
88
  end
@@ -105,8 +105,8 @@ module Sexp
105
105
 
106
106
  # @return [AbstractExpression] sub expressions in a binary tree
107
107
  def expressions
108
- # expressions = recursive_select( Sexp::AbstactExpression )
109
- expressions = elements && elements.select { |e| e.is_a?( Sexp::AbstactExpression ) }
108
+ # expressions = recursive_select( SbuilderSexp::AbstactExpression )
109
+ expressions = elements && elements.select { |e| e.is_a?( SbuilderSexp::AbstactExpression ) }
110
110
  # raise "Parser error - compound expression should build binary tree" if expressions && expressios.length >2
111
111
 
112
112
  end
@@ -171,7 +171,7 @@ module Sexp
171
171
  # @return [String] operator to use (nil if no rhs, else rhs.operator)
172
172
  def operator
173
173
  return nil if !has_rhs
174
- rhs_operators = expressions[1].recursive_select( Sexp::Operator )
174
+ rhs_operators = expressions[1].recursive_select( SbuilderSexp::Operator )
175
175
  return rhs_operators && rhs_operators.any? && rhs_operators.first.node_value
176
176
  end
177
177
 
@@ -183,8 +183,8 @@ module Sexp
183
183
  # to UnitExpressions, instead yield block iterates using 'attribute_accessors'
184
184
 
185
185
  def expressions
186
- # expressions = recursive_select( Sexp::AbstactExpression )
187
- super.select { |e| !e.is_a?(Sexp::UnitExpression) }
186
+ # expressions = recursive_select( SbuilderSexp::AbstactExpression )
187
+ super.select { |e| !e.is_a?(SbuilderSexp::UnitExpression) }
188
188
  end
189
189
 
190
190
  # AbstactExpression.travers yield if non-nil
@@ -195,16 +195,16 @@ module Sexp
195
195
  # Access record by field name or by value
196
196
  # @return [AbstactExpression:Array] to acccess record fields
197
197
  def attribute_accessors
198
- deffi = elements.select{ |e| e.is_a?( Sexp::UnitExpression )}.first
198
+ deffi = elements.select{ |e| e.is_a?( SbuilderSexp::UnitExpression )}.first
199
199
  return unless deffi && !deffi.text_value.empty?
200
- deffi = deffi.recursive_select( Sexp::AbstactExpression )
200
+ deffi = deffi.recursive_select( SbuilderSexp::AbstactExpression )
201
201
  return deffi
202
202
  end
203
203
 
204
204
 
205
205
  # @return [boolean] true if expression defines record accessor
206
206
  def has_attribute_accessors
207
- attribute_accessors && attribute_accessors.any?
207
+ attribute_accessors && attribute_accessors.any?
208
208
  end
209
209
 
210
210
  end
@@ -222,21 +222,21 @@ module Sexp
222
222
 
223
223
  # @return [AbstactExpression] for the LValue
224
224
  def expression
225
- recursive_select( Sexp::AbstactExpression).first
225
+ recursive_select( SbuilderSexp::AbstactExpression).first
226
226
  end
227
227
 
228
228
  # implements lvalue
229
229
  include TlaParserS::LValue
230
230
 
231
231
  # Implement traverse down for 'recurse_lvalue'. In my case recurse
232
- # 'Sexp::UnitExpression', which define record access by value or by name
232
+ # 'SbuilderSexp::UnitExpression', which define record access by value or by name
233
233
  #
234
234
  # @return [nil|RecordField] down next level in hierarchy
235
235
  def lvalue_down
236
- down = recursive_select( Sexp::UnitExpression ).first
237
- # down = recursive_select( Sexp::RecordField ).first
236
+ down = recursive_select( SbuilderSexp::UnitExpression ).first
237
+ # down = recursive_select( SbuilderSexp::RecordField ).first
238
238
  # return nil unless down
239
- # down.recursive_select( Sexp::RecordField ).first
239
+ # down.recursive_select( SbuilderSexp::RecordField ).first
240
240
  end
241
241
 
242
242
  end
@@ -251,7 +251,7 @@ module Sexp
251
251
  # @return [nil|AbstractExpression] down next level in hierarchy
252
252
 
253
253
  def lvalue_down
254
- down = recursive_select( Sexp::AbstactExpression ).first
254
+ down = recursive_select( SbuilderSexp::AbstactExpression ).first
255
255
  end
256
256
 
257
257
 
@@ -266,15 +266,15 @@ module Sexp
266
266
  end
267
267
 
268
268
  def operator_name
269
- recursive_select( Sexp::Identifier ).first.node_value
269
+ recursive_select( SbuilderSexp::Identifier ).first.node_value
270
270
  end
271
271
  # @return [Expression:Array] list or arguments
272
272
  def arguments
273
- recursive_select( Sexp::Expression )
273
+ recursive_select( SbuilderSexp::Expression )
274
274
  end
275
275
 
276
276
  def record_field_node
277
- recursive_select( Sexp::RecordField ).first
277
+ recursive_select( SbuilderSexp::RecordField ).first
278
278
  end
279
279
  def record_field
280
280
  node = record_field_node
@@ -297,7 +297,7 @@ module Sexp
297
297
  end
298
298
 
299
299
  def operator_node
300
- recursive_select( Sexp::Operator ).first
300
+ recursive_select( SbuilderSexp::Operator ).first
301
301
  end
302
302
  def operator
303
303
  operator_node.text_value
@@ -334,18 +334,18 @@ module Sexp
334
334
  # Node for condition
335
335
  # @return [Expression] for IF condition
336
336
  def condition_node
337
- recursive_select( Sexp::IfExpressionCondition ).first.recursive_select(Sexp::Expression).first
337
+ recursive_select( SbuilderSexp::IfExpressionCondition ).first.recursive_select(SbuilderSexp::Expression).first
338
338
  end
339
339
 
340
340
  # @return [Expression] for THEN expression
341
341
  def then_expression_node
342
- recursive_select( Sexp::IfExpressionThen ).first.recursive_select(Sexp::Expression).first end
342
+ recursive_select( SbuilderSexp::IfExpressionThen ).first.recursive_select(SbuilderSexp::Expression).first end
343
343
 
344
344
  # @return [Expression] for ELSE expression
345
345
  def else_expression_node
346
- tree_node = recursive_select( Sexp::IfExpressionElse ).first
346
+ tree_node = recursive_select( SbuilderSexp::IfExpressionElse ).first
347
347
  return tree_node unless tree_node
348
- tree_node.recursive_select(Sexp::Expression).first
348
+ tree_node.recursive_select(SbuilderSexp::Expression).first
349
349
  end
350
350
 
351
351
  def name
@@ -353,12 +353,41 @@ module Sexp
353
353
  end
354
354
 
355
355
  end
356
+
357
+ class LetExpression < SimpleExpression
358
+
359
+ def operatorDef
360
+ recursive_select( SbuilderSexp::OperatorDef ).first
361
+ end
362
+
363
+ def letExpression
364
+ elements[1]
365
+ end
366
+
367
+ # Return entries for symbol table. In this case, add just variable
368
+ # in operator definition
369
+ #
370
+ # @return [Array] of 1 hash with {:node_type,:value}
371
+ def symbol_definitions
372
+ [ { :node_type => node_type, :value => operatorDef.name } ]
373
+ end
374
+
375
+ # For documentation purposes symbol table context needs a name
376
+ # (For procedures, and macros name is ovbious. For a set
377
+ # expression we define name set a string "Set+<generator set>"
378
+ #
379
+ # @return [String] name identifying context in symbol table
380
+ def name
381
+ "LetExpr-??"
382
+ end
383
+
384
+ end
356
385
 
357
386
  class ChooseExpression < SimpleExpression
358
387
 
359
388
  # @return [BoundInExpression] root node for x \in S
360
389
  def binds_node
361
- recursive_select( Sexp::BoundInExpression ).first
390
+ recursive_select( SbuilderSexp::BoundInExpression ).first
362
391
  end
363
392
 
364
393
  # Choose defines 'choose_expression' in left hand size
@@ -406,7 +435,7 @@ module Sexp
406
435
  end
407
436
 
408
437
  def binds_nodes
409
- recursive_select( Sexp::BindsInExpression ).first.recursive_select( Sexp::BoundInExpression )
438
+ recursive_select( SbuilderSexp::BindsInExpression ).first.recursive_select( SbuilderSexp::BoundInExpression )
410
439
  end
411
440
 
412
441
  # Quantification defines 'quantified_expression' in left hand size
@@ -428,7 +457,7 @@ module Sexp
428
457
 
429
458
  # Some variables in 'constructor_expression' (most likely) refer
430
459
  # to variable defined in set constructor generate. Return name of
431
- # this variables.
460
+ # this variable.
432
461
  #
433
462
  # @return [Array] of one hash with ':node_type',':value' properties
434
463
  def symbol_definitions
@@ -441,10 +470,10 @@ module Sexp
441
470
 
442
471
  class BoundInExpression < Root
443
472
  def bind_var
444
- elements.select{ |e| e.is_a?( Sexp::Identifier ) }.first
473
+ elements.select{ |e| e.is_a?( SbuilderSexp::Identifier ) }.first
445
474
  end
446
475
  def bind_set
447
- elements.select{ |e| e.is_a?( Sexp::Expression ) }.first
476
+ elements.select{ |e| e.is_a?( SbuilderSexp::Expression ) }.first
448
477
  end
449
478
 
450
479
  end
@@ -479,21 +508,21 @@ module Sexp
479
508
  "exprsssion"
480
509
  end
481
510
  def record_base
482
- recursive_select( Sexp::RecordExcepBase ).first.recursive_select( Sexp::Expression ).first
511
+ recursive_select( SbuilderSexp::RecordExcepBase ).first.recursive_select( SbuilderSexp::Expression ).first
483
512
  end
484
513
  def record_field_definitions
485
514
  # rigth recursion results to empty RecordExceptField -node
486
- recursive_select( Sexp::RecordExceptField ).select{ |f| f.elements && f.elements.any? }
515
+ recursive_select( SbuilderSexp::RecordExceptField ).select{ |f| f.elements && f.elements.any? }
487
516
  end
488
517
  end
489
518
 
490
519
  class RecordExceptField < Root
491
520
  def lvalue_expression
492
- recursive_select( Sexp::LValue ).first
521
+ recursive_select( SbuilderSexp::LValue ).first
493
522
  end
494
523
  def rvalue_expression
495
524
  # first is expression for lvalue
496
- recursive_select( Sexp::Expression ).last
525
+ recursive_select( SbuilderSexp::Expression ).last
497
526
  end
498
527
  end
499
528
 
@@ -509,7 +538,7 @@ module Sexp
509
538
 
510
539
  # @return [RecordElement:Array] of record field definitions
511
540
  def record_fields
512
- ret = recursive_select( Sexp::RecordElement )
541
+ ret = recursive_select( SbuilderSexp::RecordElement )
513
542
  ret
514
543
  end
515
544
 
@@ -524,9 +553,9 @@ module Sexp
524
553
  # Implement traversal for 'recurse_lvalue'
525
554
  # @return [nil|RecordField] down next level in hierarchy
526
555
  def lvalue_down
527
- down = recursive_select( Sexp::RecordField ).first
556
+ down = recursive_select( SbuilderSexp::RecordField ).first
528
557
  return nil unless down
529
- down.recursive_select( Sexp::RecordField ).first
558
+ down.recursive_select( SbuilderSexp::RecordField ).first
530
559
  end
531
560
 
532
561
 
@@ -566,11 +595,12 @@ module Sexp
566
595
 
567
596
  # @return [Expression:Array] of sequence expressions
568
597
  def tuples
569
- recursive_select( Sexp::Expression )
598
+ recursive_select( SbuilderSexp::Expression )
570
599
  end
571
600
  end
572
601
 
573
602
 
603
+
574
604
  class AbstractSetExpression < AbstactExpression
575
605
  # AbstactExpression.traverse quit traversing the expression
576
606
  def lhs_node
@@ -587,25 +617,25 @@ module Sexp
587
617
  # @return [BoundInExpression|nil] syntax tree node defining
588
618
  # generator variable and set
589
619
  def binds_node
590
- ret = recursive_select( Sexp::BoundInExpression ).first
620
+ ret = recursive_select( SbuilderSexp::BoundInExpression ).first
591
621
  return nil unless ret
592
- ret = ret.recursive_select( Sexp::BoundInExpression ).first
622
+ ret = ret.recursive_select( SbuilderSexp::BoundInExpression ).first
593
623
  # puts ret
594
624
  ret
595
625
  end
596
626
 
597
627
  def set_expression
598
- deffi = recursive_select( Sexp::SetExpressionDef )
628
+ deffi = recursive_select( SbuilderSexp::SetExpressionDef )
599
629
  return nil unless deffi && deffi.any?
600
630
  ret = deffi.first.elements[0]
601
- # # ret = deffi.first.recursive_select( Sexp::SetExpression ).first
631
+ # # ret = deffi.first.recursive_select( SbuilderSexp::SetExpression ).first
602
632
  # puts "set_expression=#{ret.inspect}"
603
633
  ret
604
634
  end
605
635
 
606
636
  # Elements defined on constructore
607
637
  def set_elements
608
- elems = recursive_select( Sexp::Expression )
638
+ elems = recursive_select( SbuilderSexp::Expression )
609
639
  elems
610
640
  end
611
641
 
@@ -629,6 +659,55 @@ module Sexp
629
659
 
630
660
  end
631
661
 
662
+ class FunctionExpression < AbstactExpression
663
+
664
+ def lhs_node
665
+ nil
666
+ end
667
+
668
+
669
+ # AbstactExpression.traverse calls in yield
670
+ def expression_val
671
+ true
672
+ end
673
+
674
+ def binds_node
675
+ ret = recursive_select( SbuilderSexp::BoundInExpression ).first
676
+ # return nil unless ret
677
+ # ret = ret.recursive_select( SbuilderSexp::BoundInExpression ).first
678
+ # # puts ret
679
+ # ret
680
+ end
681
+
682
+ def function_expression
683
+ elements[1]
684
+ end
685
+
686
+ # For documentation purposes symbol table context needs a name
687
+ # (For procedures, and macros name is ovbious. For a set
688
+ # expression we define name set a string "Set+<generator set>"
689
+ #
690
+ # @return [String] name identifying context in symbol table
691
+ def name
692
+ "Func-#{binds_node.bind_set.text_value}"
693
+ end
694
+
695
+
696
+ # Some variables in 'set_expression' (most likely) refer to
697
+ # variable defined in set constructor generate. Return name of
698
+ # this variables.
699
+ #
700
+ # @return [Hash:Array] with :node_type,:value, :tree -properties
701
+ def symbol_definitions
702
+ return [] unless binds_node
703
+ [ { :node_type => node_type, :value => binds_node.bind_var.expression_val, :tree=>binds_node } ]
704
+ end
705
+
706
+
707
+
708
+ end
709
+
710
+
632
711
  class SetExpressionMap < AbstractSetExpression
633
712
  end
634
713
 
@@ -653,10 +732,17 @@ module Sexp
653
732
 
654
733
 
655
734
  class FieldByName < FieldBy
735
+
736
+ def name_expression
737
+ elements[0]
738
+ end
739
+
740
+ # ---
741
+ # depracted here down
656
742
 
657
743
  # @return [AbstactExpression] defining the name
658
744
  def field_name_expression
659
- recursive_select( Sexp::AbstactExpression ).first
745
+ recursive_select( SbuilderSexp::AbstactExpression ).first
660
746
  end
661
747
 
662
748
  def expression_val
@@ -666,10 +752,10 @@ module Sexp
666
752
  # implements lvalue
667
753
  include TlaParserS::LValue
668
754
  def lvalue_down
669
- down = recursive_select( Sexp::UnitExpression ).first
670
- # down = recursive_select( Sexp::RecordField ).first
755
+ down = recursive_select( SbuilderSexp::UnitExpression ).first
756
+ # down = recursive_select( SbuilderSexp::RecordField ).first
671
757
  # return nil unless down
672
- # down.recursive_select( Sexp::RecordField ).first
758
+ # down.recursive_select( SbuilderSexp::RecordField ).first
673
759
  end
674
760
 
675
761
 
@@ -678,26 +764,28 @@ module Sexp
678
764
  class FieldByValue < FieldBy
679
765
 
680
766
  def expression_val
681
- field_value_expression && field_value_expression.expression_val
767
+ return true if field_value_expression
682
768
  end
683
769
 
684
770
  def field_value_expression
685
- recursive_select( Sexp::AbstactExpression ).first
771
+ # recursive_select( SbuilderSexp::AbstactExpression ).first
772
+ elements[0]
686
773
  end
774
+
687
775
 
688
776
 
689
777
  # # @return [AbstactExpression] defining the value
690
778
  # def val_expression
691
- # recursive_select( Sexp::AbstactExpression ).first
779
+ # recursive_select( SbuilderSexp::AbstactExpression ).first
692
780
  # end
693
781
 
694
782
  # implements lvalue
695
783
  include TlaParserS::LValue
696
784
  def lvalue_down
697
- down = recursive_select( Sexp::UnitExpression ).first
698
- # down = recursive_select( Sexp::RecordField ).first
785
+ down = recursive_select( SbuilderSexp::UnitExpression ).first
786
+ # down = recursive_select( SbuilderSexp::RecordField ).first
699
787
  # return nil unless down
700
- # down.recursive_select( Sexp::RecordField ).first
788
+ # down.recursive_select( SbuilderSexp::RecordField ).first
701
789
  end
702
790
 
703
791
  end
@@ -776,10 +864,10 @@ module Sexp
776
864
  # 'recursive_select'
777
865
  def find_labelnode
778
866
 
779
- # return labelnode = recursive_select( Sexp::Label ).first
867
+ # return labelnode = recursive_select( SbuilderSexp::Label ).first
780
868
  if !elements.nil? then
781
869
  elements.each do |e|
782
- return e if e.is_a?( Sexp::Label )
870
+ return e if e.is_a?( SbuilderSexp::Label )
783
871
  end
784
872
  end
785
873
  # Label node not found
@@ -795,7 +883,7 @@ module Sexp
795
883
 
796
884
  # @return [UnlabeledStatement:TreeNode] TLA -language statement
797
885
  def get_statement
798
- ret = recursive_select( Sexp::UnlabeledStatement ).first
886
+ ret = recursive_select( SbuilderSexp::UnlabeledStatement ).first
799
887
  ret
800
888
  end
801
889
 
@@ -845,7 +933,7 @@ module Sexp
845
933
  class CompoundStatement < UnlabeledStatement
846
934
 
847
935
  def statements
848
- stmts=recursive_select(Sexp::StatementList).first.recursive_select(Sexp::Statement)
936
+ stmts=recursive_select(SbuilderSexp::StatementList).first.recursive_select(SbuilderSexp::Statement)
849
937
  stmts
850
938
 
851
939
  end
@@ -858,7 +946,7 @@ module Sexp
858
946
  class Goto < UnlabeledStatement
859
947
 
860
948
  def goto_label
861
- recursive_select( Sexp::Identifier).map{ |r| r.node_value }.first
949
+ recursive_select( SbuilderSexp::Identifier).map{ |r| r.node_value }.first
862
950
  end
863
951
 
864
952
  end
@@ -867,7 +955,7 @@ module Sexp
867
955
 
868
956
  # @return [Expression] to print
869
957
  def print_expression
870
- recursive_select( Sexp::Expression).first
958
+ recursive_select( SbuilderSexp::Expression).first
871
959
  end
872
960
 
873
961
  end
@@ -876,12 +964,13 @@ module Sexp
876
964
 
877
965
  # @return [LValue] where to assign to
878
966
  def lvalue
879
- recursive_select( Sexp::LValue).first
967
+ recursive_select( SbuilderSexp::LValue).first
880
968
  end
881
969
 
882
970
  # @return [Expression] expression to assign
883
971
  def rvalue
884
- recursive_select( Sexp::Expression).first
972
+ elements[1]
973
+ # recursive_select( SbuilderSexp::Expression).first
885
974
  end
886
975
 
887
976
  end
@@ -890,14 +979,27 @@ module Sexp
890
979
  class Return < UnlabeledStatement
891
980
  end
892
981
 
982
+ class WithStatement < UnlabeledStatement
983
+
984
+ def with_expression
985
+ recursive_select( SbuilderSexp::Expression).first
986
+ end
987
+
988
+ def with_statement
989
+ recursive_select( SbuilderSexp::Statement).first
990
+ end
991
+
992
+
993
+ end
994
+
893
995
  class Conditional < UnlabeledStatement
894
996
 
895
997
  def condition
896
- recursive_select( Sexp::Expression).first
998
+ recursive_select( SbuilderSexp::Expression).first
897
999
  end
898
1000
 
899
1001
  def true_or_else
900
- recursive_select( Sexp::Statement)
1002
+ recursive_select( SbuilderSexp::Statement)
901
1003
  end
902
1004
 
903
1005
  def if_true
@@ -915,7 +1017,7 @@ module Sexp
915
1017
 
916
1018
  # Return array of choices
917
1019
  def choices
918
- recursive_select( Sexp::Statement)
1020
+ recursive_select( SbuilderSexp::Statement)
919
1021
  end
920
1022
 
921
1023
  end
@@ -924,7 +1026,7 @@ module Sexp
924
1026
  class Assert < UnlabeledStatement
925
1027
 
926
1028
  def assertion
927
- recursive_select( Sexp::Expression).first
1029
+ recursive_select( SbuilderSexp::Expression).first
928
1030
  end
929
1031
 
930
1032
  end
@@ -932,7 +1034,7 @@ module Sexp
932
1034
  class Called < UnlabeledStatement
933
1035
 
934
1036
  def called
935
- recursive_select( Sexp::Identifier).map{ |r| r.node_value }.first
1037
+ recursive_select( SbuilderSexp::Identifier).map{ |r| r.node_value }.first
936
1038
  end
937
1039
 
938
1040
  def statement_val
@@ -941,7 +1043,7 @@ module Sexp
941
1043
 
942
1044
  # @return [Array] actual parameters parsed as 'Expression' nodes
943
1045
  def actual_parameters
944
- recursive_select( Sexp::Expression)
1046
+ recursive_select( SbuilderSexp::Expression)
945
1047
  end
946
1048
 
947
1049
 
@@ -966,7 +1068,7 @@ module Sexp
966
1068
  class Label < Root
967
1069
 
968
1070
  def label
969
- recursive_select(Sexp::Identifier).first.node_value
1071
+ recursive_select(SbuilderSexp::Identifier).first.node_value
970
1072
  end
971
1073
 
972
1074
  def node_value
@@ -981,7 +1083,7 @@ module Sexp
981
1083
 
982
1084
  # @return [String:Array] of directive names
983
1085
  def directives
984
- recursive_select( Sexp::Identifier ).map { |i| i.node_value }
1086
+ recursive_select( SbuilderSexp::Identifier ).map { |i| i.node_value }
985
1087
  end
986
1088
 
987
1089
 
@@ -993,12 +1095,23 @@ module Sexp
993
1095
  class Assumption < Directive
994
1096
  end
995
1097
 
1098
+ class Recursive < Directive
1099
+ def name
1100
+ directives.first
1101
+ end
1102
+
1103
+ def cardinality
1104
+ directives.length - 1
1105
+ end
1106
+ end
1107
+
1108
+
996
1109
  # ------------------------------------------------------------------
997
1110
  # callable (procedures, macros, processes?)
998
1111
 
999
1112
  class Define < Root
1000
1113
  def name
1001
- recursive_select(Sexp::Identifier).first.node_value
1114
+ recursive_select(SbuilderSexp::Identifier).first.node_value
1002
1115
  end
1003
1116
 
1004
1117
  end
@@ -1006,7 +1119,7 @@ module Sexp
1006
1119
  class Callable < Define
1007
1120
 
1008
1121
  def parameters_node
1009
- tree_nodes = recursive_select(Sexp::Parameters)
1122
+ tree_nodes = recursive_select(SbuilderSexp::Parameters)
1010
1123
  return tree_nodes.first if tree_nodes
1011
1124
  end
1012
1125
  def parameters
@@ -1016,7 +1129,7 @@ module Sexp
1016
1129
 
1017
1130
 
1018
1131
  def body_node
1019
- ret = recursive_select(Sexp::Statement).first
1132
+ ret = recursive_select(SbuilderSexp::Statement).first
1020
1133
  ret
1021
1134
  end
1022
1135
  def body
@@ -1060,14 +1173,14 @@ module Sexp
1060
1173
 
1061
1174
  # @return [Nil|ProcVariables] of variable definition node for procedure
1062
1175
  def procedure_variables_node
1063
- tree_nodes = recursive_select(Sexp::ProcVariables)
1176
+ tree_nodes = recursive_select(SbuilderSexp::ProcVariables)
1064
1177
  return tree_nodes.first if tree_nodes
1065
1178
  end
1066
1179
 
1067
1180
  # @return [VariableDef:Array] variable declarations
1068
1181
  def variable_declarations
1069
1182
  return [] unless procedure_variables_node
1070
- return procedure_variables_node.recursive_select(Sexp::VariableDef)
1183
+ return procedure_variables_node.recursive_select(SbuilderSexp::VariableDef)
1071
1184
  end
1072
1185
 
1073
1186
  def procedure_variables
@@ -1092,7 +1205,7 @@ module Sexp
1092
1205
 
1093
1206
  # For operator no body:
1094
1207
  def body_node
1095
- tree_nodes = recursive_select(Sexp::Expression)
1208
+ tree_nodes = recursive_select(SbuilderSexp::Expression)
1096
1209
  return tree_nodes.first if tree_nodes
1097
1210
  end
1098
1211
  end
@@ -1104,23 +1217,25 @@ module Sexp
1104
1217
 
1105
1218
  #
1106
1219
  def name
1107
- recursive_select(Sexp::Identifier).first.node_value
1220
+ # recursive_select(SbuilderSexp::Identifier).first.node_value
1221
+ variable.node_value
1108
1222
  end
1109
1223
 
1110
1224
  # @return [Identifier] tree node for variable defined
1111
1225
  def variable
1112
- tree_nodes = recursive_select(Sexp::Identifier).first
1226
+ tree_nodes = recursive_select(SbuilderSexp::Identifier).first
1113
1227
  end
1114
1228
 
1115
1229
 
1116
1230
  # @return [Expression] tree node for init expression
1117
1231
  def init
1118
- tree_nodes = recursive_select(Sexp::Expression).first
1232
+ tree_nodes = recursive_select(SbuilderSexp::Expression).first
1119
1233
  end
1120
1234
 
1121
1235
  # Return entries for symbol table. In this case, add just variable
1122
1236
  # definition.
1123
- # @return [Array] of 1 hash with :node_type, :value -properties
1237
+ #
1238
+ # @return [Array] of 1 hash with {:node_type,:value}
1124
1239
  def symbol_definitions
1125
1240
  [ { :node_type => node_type, :value => name } ]
1126
1241
  end
@@ -1129,10 +1244,10 @@ module Sexp
1129
1244
 
1130
1245
  class RecordElement < Root
1131
1246
  def element_name
1132
- recursive_select( Sexp::Identifier ).first
1247
+ recursive_select( SbuilderSexp::Identifier ).first
1133
1248
  end
1134
1249
  def element_expression
1135
- recursive_select( Sexp::Expression ).first
1250
+ recursive_select( SbuilderSexp::Expression ).first
1136
1251
  end
1137
1252
  end
1138
1253