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.
- checksums.yaml +7 -0
- data/README.md +75 -0
- data/VERSION +1 -0
- data/bin/tla-resolver.rb +7 -0
- data/lib/cli/cli.rb +90 -0
- data/lib/parser/exception.rb +6 -0
- data/lib/parser/lvalue.rb +63 -0
- data/lib/parser/parser.rb +129 -0
- data/lib/parser/parser_nodes.rb +1063 -0
- data/lib/parser/parser_sexp.treetop +442 -0
- data/lib/semantics/context.rb +355 -0
- data/lib/semantics/exception.rb +13 -0
- data/lib/semantics/resolver.rb +327 -0
- data/lib/semantics/symbol_table.rb +139 -0
- data/lib/tla-parser-s.rb +15 -0
- data/lib/utils/logger.rb +80 -0
- data/lib/utils/syntax_node.rb +73 -0
- data/lib/utils/version.rb +13 -0
- data/spec/fixtures/callables1.tla +64 -0
- data/spec/fixtures/directives.tla +7 -0
- data/spec/fixtures/resolver1/comments.tla +1 -0
- data/spec/fixtures/resolver1/directives.cfg +6 -0
- data/spec/fixtures/resolver1/directives.tla +12 -0
- data/spec/fixtures/resolver1/empty.tla +0 -0
- data/spec/fixtures/resolver1/macro1.tla +3 -0
- data/spec/fixtures/resolver1/macro2.tla +3 -0
- data/spec/fixtures/resolver1/op1.tla +3 -0
- data/spec/fixtures/resolver1/op2.tla +3 -0
- data/spec/fixtures/resolver1/proc1.tla +4 -0
- data/spec/fixtures/resolver1/proc2.tla +7 -0
- data/spec/fixtures/resolver1/proc3.tla +4 -0
- data/spec/fixtures/resolver1/proc4.tla +4 -0
- data/spec/fixtures/resolver1/proc4_hide.tla +4 -0
- data/spec/fixtures/resolver1/proc5.tla +4 -0
- data/spec/fixtures/resolver1/proc6.tla +4 -0
- data/spec/fixtures/resolver1/proc7.tla +4 -0
- data/spec/fixtures/resolver1/stmt_assert.tla +8 -0
- data/spec/fixtures/resolver1/stmt_assign.tla +6 -0
- data/spec/fixtures/resolver1/stmt_assign2.tla +6 -0
- data/spec/fixtures/resolver1/stmt_cond.tla +13 -0
- data/spec/fixtures/resolver1/stmt_either.tla +12 -0
- data/spec/fixtures/resolver1/stmt_print.tla +5 -0
- data/spec/fixtures/resolver1/var4.tla +1 -0
- data/spec/fixtures/resolver1/var5.tla +1 -0
- data/spec/fixtures/resolver1/var_choose_except.tla +2 -0
- data/spec/fixtures/resolver1/var_quantify.tla +4 -0
- data/spec/fixtures/resolver1/var_rec_except.tla +4 -0
- data/spec/fixtures/resolver1/var_rec_expr.tla +3 -0
- data/spec/fixtures/resolver1/var_record.tla +2 -0
- data/spec/fixtures/resolver1/var_seq.tla +1 -0
- data/spec/fixtures/resolver1/var_set.tla +1 -0
- data/spec/fixtures/resolver1/var_set_expr_map.tla +1 -0
- data/spec/fixtures/resolver1/var_x.tla +1 -0
- data/spec/fixtures/resolver1/variables.tla +4 -0
- data/spec/parser/parser_fixtures_spec.rb +117 -0
- data/spec/parser/parser_spec.rb +1649 -0
- data/spec/semantics/context_spec.rb +392 -0
- data/spec/semantics/resolver_spec.rb +364 -0
- data/spec/semantics/symbol_table_spec.rb +144 -0
- data/spec/spec_helper.rb +5 -0
- data/tla-parser-s.gemspec +41 -0
- 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
|
+
|
data/spec/spec_helper.rb
ADDED
@@ -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:
|