tla-parser-s 0.1.0

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.
Files changed (62) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +75 -0
  3. data/VERSION +1 -0
  4. data/bin/tla-resolver.rb +7 -0
  5. data/lib/cli/cli.rb +90 -0
  6. data/lib/parser/exception.rb +6 -0
  7. data/lib/parser/lvalue.rb +63 -0
  8. data/lib/parser/parser.rb +129 -0
  9. data/lib/parser/parser_nodes.rb +1063 -0
  10. data/lib/parser/parser_sexp.treetop +442 -0
  11. data/lib/semantics/context.rb +355 -0
  12. data/lib/semantics/exception.rb +13 -0
  13. data/lib/semantics/resolver.rb +327 -0
  14. data/lib/semantics/symbol_table.rb +139 -0
  15. data/lib/tla-parser-s.rb +15 -0
  16. data/lib/utils/logger.rb +80 -0
  17. data/lib/utils/syntax_node.rb +73 -0
  18. data/lib/utils/version.rb +13 -0
  19. data/spec/fixtures/callables1.tla +64 -0
  20. data/spec/fixtures/directives.tla +7 -0
  21. data/spec/fixtures/resolver1/comments.tla +1 -0
  22. data/spec/fixtures/resolver1/directives.cfg +6 -0
  23. data/spec/fixtures/resolver1/directives.tla +12 -0
  24. data/spec/fixtures/resolver1/empty.tla +0 -0
  25. data/spec/fixtures/resolver1/macro1.tla +3 -0
  26. data/spec/fixtures/resolver1/macro2.tla +3 -0
  27. data/spec/fixtures/resolver1/op1.tla +3 -0
  28. data/spec/fixtures/resolver1/op2.tla +3 -0
  29. data/spec/fixtures/resolver1/proc1.tla +4 -0
  30. data/spec/fixtures/resolver1/proc2.tla +7 -0
  31. data/spec/fixtures/resolver1/proc3.tla +4 -0
  32. data/spec/fixtures/resolver1/proc4.tla +4 -0
  33. data/spec/fixtures/resolver1/proc4_hide.tla +4 -0
  34. data/spec/fixtures/resolver1/proc5.tla +4 -0
  35. data/spec/fixtures/resolver1/proc6.tla +4 -0
  36. data/spec/fixtures/resolver1/proc7.tla +4 -0
  37. data/spec/fixtures/resolver1/stmt_assert.tla +8 -0
  38. data/spec/fixtures/resolver1/stmt_assign.tla +6 -0
  39. data/spec/fixtures/resolver1/stmt_assign2.tla +6 -0
  40. data/spec/fixtures/resolver1/stmt_cond.tla +13 -0
  41. data/spec/fixtures/resolver1/stmt_either.tla +12 -0
  42. data/spec/fixtures/resolver1/stmt_print.tla +5 -0
  43. data/spec/fixtures/resolver1/var4.tla +1 -0
  44. data/spec/fixtures/resolver1/var5.tla +1 -0
  45. data/spec/fixtures/resolver1/var_choose_except.tla +2 -0
  46. data/spec/fixtures/resolver1/var_quantify.tla +4 -0
  47. data/spec/fixtures/resolver1/var_rec_except.tla +4 -0
  48. data/spec/fixtures/resolver1/var_rec_expr.tla +3 -0
  49. data/spec/fixtures/resolver1/var_record.tla +2 -0
  50. data/spec/fixtures/resolver1/var_seq.tla +1 -0
  51. data/spec/fixtures/resolver1/var_set.tla +1 -0
  52. data/spec/fixtures/resolver1/var_set_expr_map.tla +1 -0
  53. data/spec/fixtures/resolver1/var_x.tla +1 -0
  54. data/spec/fixtures/resolver1/variables.tla +4 -0
  55. data/spec/parser/parser_fixtures_spec.rb +117 -0
  56. data/spec/parser/parser_spec.rb +1649 -0
  57. data/spec/semantics/context_spec.rb +392 -0
  58. data/spec/semantics/resolver_spec.rb +364 -0
  59. data/spec/semantics/symbol_table_spec.rb +144 -0
  60. data/spec/spec_helper.rb +5 -0
  61. data/tla-parser-s.gemspec +41 -0
  62. metadata +153 -0
@@ -0,0 +1,144 @@
1
+ require_relative "../spec_helper"
2
+
3
+ describe TlaParserS::SymbolTable do
4
+
5
+ let ( :parser ) { TlaParserS::Parser.new }
6
+ let ( :symbol_table ) { described_class.new }
7
+
8
+ # ------------------------------------------------------------------
9
+ # resolve
10
+
11
+ describe "interface" do
12
+
13
+
14
+ it "#pushContext" do
15
+ expect( symbol_table ).to respond_to( :pushContext )
16
+ end
17
+
18
+ it "#popContext" do
19
+ expect( symbol_table ).to respond_to( :popContext )
20
+ end
21
+
22
+ it "#resolveContext" do
23
+ expect( symbol_table ).to respond_to( :resolveContext )
24
+ end
25
+
26
+ end
27
+
28
+
29
+ # ------------------------------------------------------------------
30
+ # resolveContext
31
+
32
+ describe "resolveContext" do
33
+
34
+ [
35
+ {
36
+ :snippets => [ "A == 1 " ],
37
+ :desc => "Constant operator defines no symboles",
38
+ :debug => false,
39
+ :resolve => "id",
40
+ :expect => nil,
41
+ },
42
+
43
+ {
44
+ :snippets => [ "A(id) == 1 " ],
45
+ :desc => "Operator defines symbol",
46
+ :debug => false,
47
+ :resolve => "id",
48
+ :expect => {
49
+ :symbol_type => "Identifier",
50
+ :context_type => "OperatorDef",
51
+ :context => "A",
52
+ :symbol_name => "id",
53
+ },
54
+ },
55
+
56
+ {
57
+ :snippets => [
58
+ "procedure A(id) { skip; } ",
59
+ "B(id1) == 1 ",
60
+ ],
61
+ :desc => "Operator defines same symbol",
62
+ :debug => false,
63
+ :resolve => "id",
64
+ :expect => {
65
+ :context_type => "Procedure",
66
+ :symbol_type => "Identifier",
67
+ :context => "A",
68
+ :symbol_name => "id",
69
+ },
70
+ },
71
+
72
+ {
73
+ :snippets => [
74
+ "procedure A(id) { skip; } ",
75
+ "B(id1) == 1 ",
76
+ ],
77
+ :desc => "Operator defines same symbol",
78
+ :debug => false,
79
+ :resolve => "id1",
80
+ :expect => {
81
+ :symbol_type => "Identifier",
82
+ :context_type => "OperatorDef",
83
+ :context => "B",
84
+ :symbol_name => "id1",
85
+ },
86
+ },
87
+
88
+ {
89
+ :snippets => [
90
+ "procedure A(id) { skip; } ",
91
+ "B(id1) == 1 ",
92
+ ],
93
+ :desc => "Operator defines same symbol",
94
+ :debug => false,
95
+ :resolve => "id2",
96
+ :expect => nil,
97
+ },
98
+
99
+ {
100
+ :snippets => [
101
+ "vari = 1",
102
+ "B(id1) == 1 ",
103
+ ],
104
+ :desc => "Variable definition resoloved",
105
+ :debug => false,
106
+ :resolve => "vari",
107
+ :expect => {
108
+ :symbol_type => "VariableDef",
109
+ :context_type => "VariableDef",
110
+ :context => "vari",
111
+ :symbol_name => "vari",
112
+ },
113
+ },
114
+
115
+
116
+ ].each_with_index do |testCase,i|
117
+
118
+
119
+ it "#Case #{i}: #{testCase[:desc]} - parse '#{testCase[:str]}' starting '#{testCase[:start]}'" do
120
+
121
+ testCase[:snippets].each do |snippet|
122
+
123
+ tree = parser.parse( snippet )
124
+ if ( testCase[:debug] )
125
+ puts ""
126
+ puts tree.inspect
127
+ end
128
+ tree.defines.each { |define| symbol_table.pushContext( define )}
129
+
130
+ end # iterate test case snippets
131
+
132
+ expect( symbol_table.resolveContext( testCase[:resolve] ) ).to eql( testCase[:expect] );
133
+
134
+
135
+ end # it
136
+
137
+ end # each
138
+
139
+
140
+ end
141
+
142
+
143
+ end
144
+
@@ -0,0 +1,5 @@
1
+ # spec_helper.rb
2
+
3
+ require_relative "../lib/tla-parser-s"
4
+
5
+ FIXTURE_ROOT = File.join(File.dirname(__FILE__), "fixtures")
@@ -0,0 +1,41 @@
1
+ # -*- encoding: utf-8; mode: ruby -*-
2
+
3
+ lib = File.expand_path('../lib/', __FILE__)
4
+ $:.unshift lib unless $:.include?(lib)
5
+
6
+
7
+ # http://guides.rubygems.org/make-your-own-gem/
8
+
9
+ Gem::Specification.new do |s|
10
+
11
+ # version = "0.0.1.pre"
12
+ version = File.open( "VERSION", "r" ) { |f| f.read }.strip.gsub( "-SNAPSHOT", ".pre" )
13
+
14
+ s.name = 'tla-parser-s'
15
+ s.version = version
16
+ s.date = Time.now.strftime( "%Y-%m-%d" ) #'2014-09-10'
17
+ s.summary = "Treetop parser & sematic routines to resolve modules+"
18
+ s.description = <<EOF
19
+ A library paring TLA+ language. Gem name `tla-parser-s` because did
20
+ not want to reserve "officical" `tla-parser` name.
21
+
22
+ Sematic routines create a list of files -names (=modules) needed to
23
+ satisfy set of entry points. Entry points include names passed as
24
+ parameters to command line tool (`bin/tla-resolver.rb`), or as API
25
+ paramters to `TlaParserS::Resolver#resolveModulesDo`.
26
+
27
+ EOF
28
+
29
+ s.authors = ["jarjuk"]
30
+ s.files = ["README.md", "VERSION", "#{s.name}.gemspec" ] | Dir.glob("lib/**/*") | Dir.glob("spec/**/*")
31
+ s.require_paths = [ "lib" ]
32
+ s.executables = [ "tla-resolver.rb" ]
33
+ s.license = 'MIT'
34
+
35
+ s.required_ruby_version = '~> 2'
36
+
37
+ s.add_runtime_dependency 'thor', '~>0.19', ">=0.19.1"
38
+ s.add_runtime_dependency 'treetop', '~>1.6', ">=1.6.3"
39
+
40
+
41
+ end
metadata ADDED
@@ -0,0 +1,153 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tla-parser-s
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - jarjuk
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-03-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: thor
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.19'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.19.1
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '0.19'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 0.19.1
33
+ - !ruby/object:Gem::Dependency
34
+ name: treetop
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.6'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 1.6.3
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '1.6'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 1.6.3
53
+ description: |2+
54
+ A library paring TLA+ language. Gem name `tla-parser-s` because did
55
+ not want to reserve "officical" `tla-parser` name.
56
+
57
+ Sematic routines create a list of files -names (=modules) needed to
58
+ satisfy set of entry points. Entry points include names passed as
59
+ parameters to command line tool (`bin/tla-resolver.rb`), or as API
60
+ paramters to `TlaParserS::Resolver#resolveModulesDo`.
61
+
62
+ email:
63
+ executables:
64
+ - tla-resolver.rb
65
+ extensions: []
66
+ extra_rdoc_files: []
67
+ files:
68
+ - README.md
69
+ - VERSION
70
+ - bin/tla-resolver.rb
71
+ - lib/cli/cli.rb
72
+ - lib/parser/exception.rb
73
+ - lib/parser/lvalue.rb
74
+ - lib/parser/parser.rb
75
+ - lib/parser/parser_nodes.rb
76
+ - lib/parser/parser_sexp.treetop
77
+ - lib/semantics/context.rb
78
+ - lib/semantics/exception.rb
79
+ - lib/semantics/resolver.rb
80
+ - lib/semantics/symbol_table.rb
81
+ - lib/tla-parser-s.rb
82
+ - lib/utils/logger.rb
83
+ - lib/utils/syntax_node.rb
84
+ - lib/utils/version.rb
85
+ - spec/fixtures/callables1.tla
86
+ - spec/fixtures/directives.tla
87
+ - spec/fixtures/resolver1/comments.tla
88
+ - spec/fixtures/resolver1/directives.cfg
89
+ - spec/fixtures/resolver1/directives.tla
90
+ - spec/fixtures/resolver1/empty.tla
91
+ - spec/fixtures/resolver1/macro1.tla
92
+ - spec/fixtures/resolver1/macro2.tla
93
+ - spec/fixtures/resolver1/op1.tla
94
+ - spec/fixtures/resolver1/op2.tla
95
+ - spec/fixtures/resolver1/proc1.tla
96
+ - spec/fixtures/resolver1/proc2.tla
97
+ - spec/fixtures/resolver1/proc3.tla
98
+ - spec/fixtures/resolver1/proc4.tla
99
+ - spec/fixtures/resolver1/proc4_hide.tla
100
+ - spec/fixtures/resolver1/proc5.tla
101
+ - spec/fixtures/resolver1/proc6.tla
102
+ - spec/fixtures/resolver1/proc7.tla
103
+ - spec/fixtures/resolver1/stmt_assert.tla
104
+ - spec/fixtures/resolver1/stmt_assign.tla
105
+ - spec/fixtures/resolver1/stmt_assign2.tla
106
+ - spec/fixtures/resolver1/stmt_cond.tla
107
+ - spec/fixtures/resolver1/stmt_either.tla
108
+ - spec/fixtures/resolver1/stmt_print.tla
109
+ - spec/fixtures/resolver1/var4.tla
110
+ - spec/fixtures/resolver1/var5.tla
111
+ - spec/fixtures/resolver1/var_choose_except.tla
112
+ - spec/fixtures/resolver1/var_quantify.tla
113
+ - spec/fixtures/resolver1/var_rec_except.tla
114
+ - spec/fixtures/resolver1/var_rec_expr.tla
115
+ - spec/fixtures/resolver1/var_record.tla
116
+ - spec/fixtures/resolver1/var_seq.tla
117
+ - spec/fixtures/resolver1/var_set.tla
118
+ - spec/fixtures/resolver1/var_set_expr_map.tla
119
+ - spec/fixtures/resolver1/var_x.tla
120
+ - spec/fixtures/resolver1/variables.tla
121
+ - spec/parser/parser_fixtures_spec.rb
122
+ - spec/parser/parser_spec.rb
123
+ - spec/semantics/context_spec.rb
124
+ - spec/semantics/resolver_spec.rb
125
+ - spec/semantics/symbol_table_spec.rb
126
+ - spec/spec_helper.rb
127
+ - tla-parser-s.gemspec
128
+ homepage:
129
+ licenses:
130
+ - MIT
131
+ metadata: {}
132
+ post_install_message:
133
+ rdoc_options: []
134
+ require_paths:
135
+ - lib
136
+ required_ruby_version: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - "~>"
139
+ - !ruby/object:Gem::Version
140
+ version: '2'
141
+ required_rubygems_version: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ requirements: []
147
+ rubyforge_project:
148
+ rubygems_version: 2.2.2
149
+ signing_key:
150
+ specification_version: 4
151
+ summary: Treetop parser & sematic routines to resolve modules+
152
+ test_files: []
153
+ has_rdoc: