bel_parser 1.0.0.alpha.6 → 1.0.0.alpha.7
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 +4 -4
- data/VERSION +1 -1
- data/lib/bel_parser/ast_filter.rb +13 -0
- data/lib/bel_parser/expression/parser.rb +2 -3
- data/lib/bel_parser/expression/validator.rb +3 -5
- data/lib/bel_parser/parser.rb +4 -5
- data/lib/bel_parser/parsers/ast/node.rb +130 -1
- data/lib/bel_parser/parsers/bel_script/define_annotation.rb +144 -144
- data/lib/bel_parser/parsers/bel_script/define_annotation.rl +24 -24
- data/lib/bel_parser/parsers/bel_script/define_namespace.rb +39 -39
- data/lib/bel_parser/parsers/bel_script/define_namespace.rl +10 -10
- data/lib/bel_parser/script/parser.rb +4 -5
- metadata +1 -4
- data/lib/bel_parser/ast_validator.rb +0 -40
- data/lib/bel_parser/parsers/ast/mapped_traversal.rb +0 -36
- data/lib/bel_parser/parsers/ast/traversal.rb +0 -21
@@ -16,60 +16,60 @@
|
|
16
16
|
URL_KW = [uU][rR][lL];
|
17
17
|
|
18
18
|
action annotation_keyword {
|
19
|
-
@buffers[:
|
19
|
+
@buffers[:annotation_definition] = annotation_definition()
|
20
20
|
}
|
21
21
|
|
22
22
|
action keyword {
|
23
|
-
@buffers[:
|
24
|
-
|
23
|
+
@buffers[:annotation_definition] = annotation_definition(
|
24
|
+
keyword(@buffers[:ident]))
|
25
25
|
}
|
26
26
|
|
27
27
|
action list_keyword {
|
28
|
-
@buffers[:
|
28
|
+
@buffers[:annotation_definition] = @buffers[:annotation_definition] << domain()
|
29
29
|
}
|
30
30
|
|
31
31
|
action pattern_keyword {
|
32
|
-
@buffers[:
|
32
|
+
@buffers[:annotation_definition] = @buffers[:annotation_definition] << domain(pattern())
|
33
33
|
}
|
34
34
|
|
35
35
|
action url_keyword {
|
36
|
-
@buffers[:
|
36
|
+
@buffers[:annotation_definition] = @buffers[:annotation_definition] << domain(url())
|
37
37
|
}
|
38
38
|
|
39
39
|
action pattern {
|
40
|
-
keyword, domain
|
41
|
-
domain
|
42
|
-
|
43
|
-
@buffers[:
|
40
|
+
keyword, domain = @buffers[:annotation_definition].children
|
41
|
+
domain = domain(
|
42
|
+
domain.children[0] << @buffers[:string])
|
43
|
+
@buffers[:annotation_definition] = annotation_definition(keyword, domain)
|
44
44
|
}
|
45
45
|
|
46
46
|
action url {
|
47
|
-
keyword, domain
|
48
|
-
domain
|
49
|
-
|
50
|
-
@buffers[:
|
47
|
+
keyword, domain = @buffers[:annotation_definition].children
|
48
|
+
domain = domain(
|
49
|
+
domain.children[0] << @buffers[:string])
|
50
|
+
@buffers[:annotation_definition] = annotation_definition(keyword, domain)
|
51
51
|
}
|
52
52
|
|
53
53
|
action list {
|
54
|
-
keyword, domain
|
55
|
-
domain
|
56
|
-
|
57
|
-
@buffers[:
|
54
|
+
keyword, domain = @buffers[:annotation_definition].children
|
55
|
+
domain = domain(
|
56
|
+
@buffers[:list])
|
57
|
+
@buffers[:annotation_definition] = annotation_definition(keyword, domain)
|
58
58
|
}
|
59
59
|
|
60
|
-
action
|
61
|
-
yield @buffers[:
|
60
|
+
action yield_annotation_definition {
|
61
|
+
yield @buffers[:annotation_definition]
|
62
62
|
}
|
63
63
|
|
64
64
|
# Define FSM
|
65
|
-
|
65
|
+
annotation_definition :=
|
66
66
|
DEFINE_KW SP+ ANNOTATION_KW @annotation_keyword SP+
|
67
67
|
IDENT %keyword SP+
|
68
68
|
AS_KW SP+
|
69
69
|
(
|
70
|
-
(LIST_KW %list_keyword SP+ LIST %list SP* NL @
|
71
|
-
(PATTERN_KW %pattern_keyword SP+ STRING %pattern SP* NL @
|
72
|
-
(URL_KW %url_keyword SP+ STRING %url SP* NL @
|
70
|
+
(LIST_KW %list_keyword SP+ LIST %list SP* NL @yield_annotation_definition) |
|
71
|
+
(PATTERN_KW %pattern_keyword SP+ STRING %pattern SP* NL @yield_annotation_definition) |
|
72
|
+
(URL_KW %url_keyword SP+ STRING %url SP* NL @yield_annotation_definition)
|
73
73
|
);
|
74
74
|
}%%
|
75
75
|
=end
|
@@ -397,17 +397,17 @@ begin
|
|
397
397
|
when 1 then
|
398
398
|
begin
|
399
399
|
|
400
|
-
@buffers[:
|
400
|
+
@buffers[:namespace_definition] = namespace_definition()
|
401
401
|
end
|
402
402
|
when 6 then
|
403
403
|
begin
|
404
404
|
|
405
|
-
@buffers[:
|
405
|
+
@buffers[:namespace_definition] = @buffers[:namespace_definition] << domain(url())
|
406
406
|
end
|
407
407
|
when 12 then
|
408
408
|
begin
|
409
409
|
|
410
|
-
yield @buffers[:
|
410
|
+
yield @buffers[:namespace_definition]
|
411
411
|
end
|
412
412
|
when 3 then
|
413
413
|
begin
|
@@ -434,7 +434,7 @@ begin
|
|
434
434
|
end
|
435
435
|
begin
|
436
436
|
|
437
|
-
@buffers[:
|
437
|
+
@buffers[:namespace_definition] = @buffers[:namespace_definition] << keyword(@buffers[:ident])
|
438
438
|
end
|
439
439
|
when 13 then
|
440
440
|
begin
|
@@ -474,10 +474,10 @@ begin
|
|
474
474
|
end
|
475
475
|
begin
|
476
476
|
|
477
|
-
keyword, domain
|
478
|
-
domain
|
479
|
-
|
480
|
-
@buffers[:
|
477
|
+
keyword, domain = @buffers[:namespace_definition].children
|
478
|
+
domain = domain(
|
479
|
+
domain.children[0] << @buffers[:string])
|
480
|
+
@buffers[:namespace_definition] = namespace_definition(keyword, domain)
|
481
481
|
end
|
482
482
|
when 15 then
|
483
483
|
begin
|
@@ -497,14 +497,14 @@ begin
|
|
497
497
|
end
|
498
498
|
begin
|
499
499
|
|
500
|
-
keyword, domain
|
501
|
-
domain
|
502
|
-
|
503
|
-
@buffers[:
|
500
|
+
keyword, domain = @buffers[:namespace_definition].children
|
501
|
+
domain = domain(
|
502
|
+
domain.children[0] << @buffers[:string])
|
503
|
+
@buffers[:namespace_definition] = namespace_definition(keyword, domain)
|
504
504
|
end
|
505
505
|
begin
|
506
506
|
|
507
|
-
yield @buffers[:
|
507
|
+
yield @buffers[:namespace_definition]
|
508
508
|
end
|
509
509
|
end
|
510
510
|
end
|
@@ -966,17 +966,17 @@ begin
|
|
966
966
|
when 1 then
|
967
967
|
begin
|
968
968
|
|
969
|
-
@buffers[:
|
969
|
+
@buffers[:namespace_definition] = namespace_definition()
|
970
970
|
end
|
971
971
|
when 6 then
|
972
972
|
begin
|
973
973
|
|
974
|
-
@buffers[:
|
974
|
+
@buffers[:namespace_definition] = @buffers[:namespace_definition] << domain(url())
|
975
975
|
end
|
976
976
|
when 12 then
|
977
977
|
begin
|
978
978
|
|
979
|
-
yield @buffers[:
|
979
|
+
yield @buffers[:namespace_definition]
|
980
980
|
end
|
981
981
|
when 3 then
|
982
982
|
begin
|
@@ -1003,7 +1003,7 @@ begin
|
|
1003
1003
|
end
|
1004
1004
|
begin
|
1005
1005
|
|
1006
|
-
@buffers[:
|
1006
|
+
@buffers[:namespace_definition] = @buffers[:namespace_definition] << keyword(@buffers[:ident])
|
1007
1007
|
end
|
1008
1008
|
when 13 then
|
1009
1009
|
begin
|
@@ -1043,10 +1043,10 @@ begin
|
|
1043
1043
|
end
|
1044
1044
|
begin
|
1045
1045
|
|
1046
|
-
keyword, domain
|
1047
|
-
domain
|
1048
|
-
|
1049
|
-
@buffers[:
|
1046
|
+
keyword, domain = @buffers[:namespace_definition].children
|
1047
|
+
domain = domain(
|
1048
|
+
domain.children[0] << @buffers[:string])
|
1049
|
+
@buffers[:namespace_definition] = namespace_definition(keyword, domain)
|
1050
1050
|
end
|
1051
1051
|
when 15 then
|
1052
1052
|
begin
|
@@ -1066,14 +1066,14 @@ begin
|
|
1066
1066
|
end
|
1067
1067
|
begin
|
1068
1068
|
|
1069
|
-
keyword, domain
|
1070
|
-
domain
|
1071
|
-
|
1072
|
-
@buffers[:
|
1069
|
+
keyword, domain = @buffers[:namespace_definition].children
|
1070
|
+
domain = domain(
|
1071
|
+
domain.children[0] << @buffers[:string])
|
1072
|
+
@buffers[:namespace_definition] = namespace_definition(keyword, domain)
|
1073
1073
|
end
|
1074
1074
|
begin
|
1075
1075
|
|
1076
|
-
yield @buffers[:
|
1076
|
+
yield @buffers[:namespace_definition]
|
1077
1077
|
end
|
1078
1078
|
end
|
1079
1079
|
end
|
@@ -1586,17 +1586,17 @@ begin
|
|
1586
1586
|
when 1 then
|
1587
1587
|
begin
|
1588
1588
|
|
1589
|
-
@buffers[:
|
1589
|
+
@buffers[:namespace_definition] = namespace_definition()
|
1590
1590
|
end
|
1591
1591
|
when 6 then
|
1592
1592
|
begin
|
1593
1593
|
|
1594
|
-
@buffers[:
|
1594
|
+
@buffers[:namespace_definition] = @buffers[:namespace_definition] << domain(url())
|
1595
1595
|
end
|
1596
1596
|
when 12 then
|
1597
1597
|
begin
|
1598
1598
|
|
1599
|
-
yield @buffers[:
|
1599
|
+
yield @buffers[:namespace_definition]
|
1600
1600
|
end
|
1601
1601
|
when 3 then
|
1602
1602
|
begin
|
@@ -1623,7 +1623,7 @@ begin
|
|
1623
1623
|
end
|
1624
1624
|
begin
|
1625
1625
|
|
1626
|
-
@buffers[:
|
1626
|
+
@buffers[:namespace_definition] = @buffers[:namespace_definition] << keyword(@buffers[:ident])
|
1627
1627
|
end
|
1628
1628
|
when 13 then
|
1629
1629
|
begin
|
@@ -1663,10 +1663,10 @@ begin
|
|
1663
1663
|
end
|
1664
1664
|
begin
|
1665
1665
|
|
1666
|
-
keyword, domain
|
1667
|
-
domain
|
1668
|
-
|
1669
|
-
@buffers[:
|
1666
|
+
keyword, domain = @buffers[:namespace_definition].children
|
1667
|
+
domain = domain(
|
1668
|
+
domain.children[0] << @buffers[:string])
|
1669
|
+
@buffers[:namespace_definition] = namespace_definition(keyword, domain)
|
1670
1670
|
end
|
1671
1671
|
when 15 then
|
1672
1672
|
begin
|
@@ -1686,14 +1686,14 @@ begin
|
|
1686
1686
|
end
|
1687
1687
|
begin
|
1688
1688
|
|
1689
|
-
keyword, domain
|
1690
|
-
domain
|
1691
|
-
|
1692
|
-
@buffers[:
|
1689
|
+
keyword, domain = @buffers[:namespace_definition].children
|
1690
|
+
domain = domain(
|
1691
|
+
domain.children[0] << @buffers[:string])
|
1692
|
+
@buffers[:namespace_definition] = namespace_definition(keyword, domain)
|
1693
1693
|
end
|
1694
1694
|
begin
|
1695
1695
|
|
1696
|
-
yield @buffers[:
|
1696
|
+
yield @buffers[:namespace_definition]
|
1697
1697
|
end
|
1698
1698
|
end
|
1699
1699
|
end
|
@@ -13,26 +13,26 @@
|
|
13
13
|
URL_KW = [uU][rR][lL];
|
14
14
|
|
15
15
|
action namespace_keyword {
|
16
|
-
@buffers[:
|
16
|
+
@buffers[:namespace_definition] = namespace_definition()
|
17
17
|
}
|
18
18
|
|
19
19
|
action keyword {
|
20
|
-
@buffers[:
|
20
|
+
@buffers[:namespace_definition] = @buffers[:namespace_definition] << keyword(@buffers[:ident])
|
21
21
|
}
|
22
22
|
|
23
23
|
action url_keyword {
|
24
|
-
@buffers[:
|
24
|
+
@buffers[:namespace_definition] = @buffers[:namespace_definition] << domain(url())
|
25
25
|
}
|
26
26
|
|
27
27
|
action string {
|
28
|
-
keyword, domain
|
29
|
-
domain
|
30
|
-
|
31
|
-
@buffers[:
|
28
|
+
keyword, domain = @buffers[:namespace_definition].children
|
29
|
+
domain = domain(
|
30
|
+
domain.children[0] << @buffers[:string])
|
31
|
+
@buffers[:namespace_definition] = namespace_definition(keyword, domain)
|
32
32
|
}
|
33
33
|
|
34
|
-
action
|
35
|
-
yield @buffers[:
|
34
|
+
action yield_namespace_definition {
|
35
|
+
yield @buffers[:namespace_definition]
|
36
36
|
}
|
37
37
|
|
38
38
|
# Define FSM
|
@@ -49,7 +49,7 @@
|
|
49
49
|
SP+
|
50
50
|
STRING %string
|
51
51
|
SP*
|
52
|
-
NL @
|
52
|
+
NL @yield_namespace_definition;
|
53
53
|
}%%
|
54
54
|
=end
|
55
55
|
# end: ragel
|
@@ -16,8 +16,8 @@ module BELParser
|
|
16
16
|
:simple_statement,
|
17
17
|
:observed_term,
|
18
18
|
:nested_statement,
|
19
|
-
:
|
20
|
-
:
|
19
|
+
:annotation_definition,
|
20
|
+
:namespace_definition,
|
21
21
|
:set,
|
22
22
|
:unset,
|
23
23
|
:blank_line,
|
@@ -39,10 +39,9 @@ module BELParser
|
|
39
39
|
end
|
40
40
|
|
41
41
|
if __FILE__ == $PROGRAM_NAME
|
42
|
-
BELParser::Script::Parser.new.each($stdin) do |
|
43
|
-
line_number, line, ast_results = line_result
|
42
|
+
BELParser::Script::Parser.new.each($stdin) do |(line_number, line, results)|
|
44
43
|
puts "#{line_number}: #{line}"
|
45
|
-
|
44
|
+
results.each do |ast|
|
46
45
|
puts ast.to_s(1)
|
47
46
|
end
|
48
47
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bel_parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.alpha.
|
4
|
+
version: 1.0.0.alpha.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anthony Bargnesi
|
@@ -27,7 +27,6 @@ files:
|
|
27
27
|
- lib/bel_parser.rb
|
28
28
|
- lib/bel_parser/ast_filter.rb
|
29
29
|
- lib/bel_parser/ast_generator.rb
|
30
|
-
- lib/bel_parser/ast_validator.rb
|
31
30
|
- lib/bel_parser/expression/parser.rb
|
32
31
|
- lib/bel_parser/expression/validator.rb
|
33
32
|
- lib/bel_parser/language.rb
|
@@ -219,10 +218,8 @@ files:
|
|
219
218
|
- lib/bel_parser/mixin/line_continuator.rb
|
220
219
|
- lib/bel_parser/mixin/line_mapping.rb
|
221
220
|
- lib/bel_parser/parser.rb
|
222
|
-
- lib/bel_parser/parsers/ast/mapped_traversal.rb
|
223
221
|
- lib/bel_parser/parsers/ast/node.rb
|
224
222
|
- lib/bel_parser/parsers/ast/sexp.rb
|
225
|
-
- lib/bel_parser/parsers/ast/traversal.rb
|
226
223
|
- lib/bel_parser/parsers/bel_script.rb
|
227
224
|
- lib/bel_parser/parsers/bel_script/define_annotation.rb
|
228
225
|
- lib/bel_parser/parsers/bel_script/define_annotation.rl
|
@@ -1,40 +0,0 @@
|
|
1
|
-
require_relative 'ast_generator'
|
2
|
-
require_relative 'parsers/ast/node'
|
3
|
-
require_relative 'parsers/ast/sexp'
|
4
|
-
require_relative 'parsers/ast/mapped_traversal'
|
5
|
-
|
6
|
-
module BELParser
|
7
|
-
# ASTValidator applies observers to an AST traversal.
|
8
|
-
class ASTValidator
|
9
|
-
def initialize(observers: [])
|
10
|
-
@observers = observers
|
11
|
-
end
|
12
|
-
|
13
|
-
def each(ast_source, &block)
|
14
|
-
if block_given?
|
15
|
-
traversal = observable_traversal
|
16
|
-
ast_source.each do |(line_number, line, ast_results)|
|
17
|
-
traverse(traversal, line_number, line, ast_results, &block)
|
18
|
-
end
|
19
|
-
else
|
20
|
-
enum_for(:each, ast_source)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def traverse(traversal, line_number, line, ast_results)
|
25
|
-
ast_results.each do |ast|
|
26
|
-
traversal.traverse(ast) do |node, results|
|
27
|
-
yield([line_number, line, node, (results && results.compact)])
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def observable_traversal
|
33
|
-
traversal = BELParser::Parsers::AST::MappedTraversal.new
|
34
|
-
@observers.each do |observer|
|
35
|
-
traversal.add_observer(observer)
|
36
|
-
end
|
37
|
-
traversal
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
require 'observer'
|
2
|
-
|
3
|
-
module BELParser
|
4
|
-
module Parsers
|
5
|
-
module AST
|
6
|
-
# Traversal provides an observable walk that maps over the
|
7
|
-
# {BELParser::Parsers::AST::Node AST node} and returns the results.
|
8
|
-
# Alternatively, see {BELParser::Parsers::AST::Traversal}.
|
9
|
-
class MappedTraversal
|
10
|
-
include Observable
|
11
|
-
|
12
|
-
def traverse(ast)
|
13
|
-
if block_given?
|
14
|
-
ast.traverse do |node|
|
15
|
-
changed
|
16
|
-
yield(node, notify_observers(node))
|
17
|
-
end
|
18
|
-
else
|
19
|
-
enum_for(:traverse, ast)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def notify_observers(*args)
|
24
|
-
if defined? @observer_state && @observer_state
|
25
|
-
@observer_state = false
|
26
|
-
if defined? @observer_peers
|
27
|
-
@observer_peers.map do |k, v|
|
28
|
-
k.send v, *args
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
require 'observer'
|
2
|
-
|
3
|
-
module BELParser
|
4
|
-
module Parsers
|
5
|
-
module AST
|
6
|
-
# Traversal provides an observable walk over an
|
7
|
-
# {BELParser::Parsers::AST::Node AST node}. A result is not conveyed from the
|
8
|
-
# walk (alternatively, see {BELParser::Parsers::AST::MappedTraversal}).
|
9
|
-
class Traversal
|
10
|
-
include Observable
|
11
|
-
|
12
|
-
def traverse(ast)
|
13
|
-
ast.traverse do |node|
|
14
|
-
changed
|
15
|
-
notify_observers(node)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|