bel_parser 1.0.0.alpha.6 → 1.0.0.alpha.7
Sign up to get free protection for your applications and to get access to all the features.
- 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
|