bel_parser 1.0.0.alpha.38-java → 1.0.0.alpha.39-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/lib/bel_parser/ast_filter.rb +6 -2
  4. data/lib/bel_parser/parsers/ast/node.rb +113 -58
  5. data/lib/bel_parser/parsers/bel_script/define_annotation.rb +4175 -3097
  6. data/lib/bel_parser/parsers/bel_script/define_annotation.rl +142 -49
  7. data/lib/bel_parser/parsers/bel_script/define_namespace.rb +980 -461
  8. data/lib/bel_parser/parsers/bel_script/define_namespace.rl +79 -39
  9. data/lib/bel_parser/parsers/bel_script/set.rb +4878 -2743
  10. data/lib/bel_parser/parsers/bel_script/set.rl +114 -32
  11. data/lib/bel_parser/parsers/bel_script/set_document.rb +5839 -5292
  12. data/lib/bel_parser/parsers/bel_script/set_document.rl +130 -27
  13. data/lib/bel_parser/parsers/bel_script/unset.rb +321 -234
  14. data/lib/bel_parser/parsers/bel_script/unset.rl +49 -21
  15. data/lib/bel_parser/parsers/common/blank_line.rb +12 -11
  16. data/lib/bel_parser/parsers/common/blank_line.rl +12 -12
  17. data/lib/bel_parser/parsers/common/comment_line.rb +65 -40
  18. data/lib/bel_parser/parsers/common/comment_line.rl +26 -26
  19. data/lib/bel_parser/parsers/common/common.rl +60 -0
  20. data/lib/bel_parser/parsers/common/function.rb +319 -0
  21. data/lib/bel_parser/parsers/common/function.rl +149 -0
  22. data/lib/bel_parser/parsers/common/identifier.rb +72 -68
  23. data/lib/bel_parser/parsers/common/identifier.rl +73 -29
  24. data/lib/bel_parser/parsers/common/list.rb +1617 -1243
  25. data/lib/bel_parser/parsers/common/list.rl +120 -60
  26. data/lib/bel_parser/parsers/common/string.rb +114 -41
  27. data/lib/bel_parser/parsers/common/string.rl +91 -28
  28. data/lib/bel_parser/parsers/common.rb +1 -0
  29. data/lib/bel_parser/parsers/expression/comment.rb +70 -38
  30. data/lib/bel_parser/parsers/expression/comment.rl +37 -20
  31. data/lib/bel_parser/parsers/expression/nested_statement.rb +63116 -13958
  32. data/lib/bel_parser/parsers/expression/nested_statement.rl +53 -23
  33. data/lib/bel_parser/parsers/expression/observed_term.rb +32497 -5188
  34. data/lib/bel_parser/parsers/expression/observed_term.rl +25 -20
  35. data/lib/bel_parser/parsers/expression/parameter.rb +2861 -847
  36. data/lib/bel_parser/parsers/expression/parameter.rl +178 -21
  37. data/lib/bel_parser/parsers/expression/relationship.rb +73 -55
  38. data/lib/bel_parser/parsers/expression/relationship.rl +41 -23
  39. data/lib/bel_parser/parsers/expression/simple_statement.rb +42895 -7846
  40. data/lib/bel_parser/parsers/expression/simple_statement.rl +41 -24
  41. data/lib/bel_parser/parsers/expression/term.rb +16498 -2602
  42. data/lib/bel_parser/parsers/expression/term.rl +52 -35
  43. data/lib/bel_parser/parsers/line_parser.rb +1 -0
  44. data/lib/bel_parser/parsers/mixin/buffer.rb +4 -0
  45. data/lib/bel_parser/parsers/tracer.rb +19 -0
  46. data/lib/bel_parser/script/state/namespace_definition.rb +1 -0
  47. metadata +10 -7
@@ -8,69 +8,156 @@
8
8
  include 'string.rl';
9
9
  include 'list.rl';
10
10
 
11
- DEFINE_KW = [dD][eE][fF][iI][nN][eE];
12
- ANNOTATION_KW = [aA][nN][nN][oO][tT][aA][tT][iI][oO][nN];
13
- AS_KW = [aA][sS];
14
- LIST_KW = [lL][iI][sS][tT];
15
- PATTERN_KW = [pP][aA][tT][tT][eE][rR][nN];
16
- URL_KW = [uU][rR][lL];
17
-
18
- action annotation_keyword {
19
- @buffers[:annotation_definition] = annotation_definition()
11
+ action add_name {
12
+ trace('DEFINE_ANNOTATION add_name')
13
+ name = @buffers.delete(:ident)
14
+ @buffers[:annotation_definition_name] = name
20
15
  }
21
16
 
22
- action keyword {
23
- @buffers[:annotation_definition] = annotation_definition(
24
- keyword(@buffers[:ident]))
17
+ action add_string_value {
18
+ trace('DEFINE_ANNOTATION add_string_value')
19
+ string_node = @buffers.delete(:string)
20
+ if @url_domain
21
+ leaf = domain(url(string_node))
22
+ leaf.complete = string_node.complete
23
+ elsif @pattern_domain
24
+ leaf = domain(pattern(string_node))
25
+ leaf.complete = string_node.complete
26
+ else
27
+ leaf = domain(string_node)
28
+ # defined as list, given string
29
+ leaf.complete = false
30
+ end
31
+ @buffers[:annotation_definition_domain] = leaf
25
32
  }
26
33
 
27
- action list_keyword {
28
- @buffers[:annotation_definition] = @buffers[:annotation_definition] << domain()
34
+ action add_list_value {
35
+ trace('DEFINE_ANNOTATION add_list_value')
36
+ list_node = @buffers.delete(:list)
37
+ if @url_domain
38
+ leaf = domain(url(list_node))
39
+ # defined as url, given list
40
+ leaf.completed = false
41
+ elsif @pattern_domain
42
+ leaf = domain(pattern(list_node))
43
+ # defined as url, given pattern
44
+ leaf.complete = false
45
+ else
46
+ leaf = domain(list_node)
47
+ leaf.complete = list_node.complete
48
+ end
49
+ @buffers[:annotation_definition_domain] = leaf
29
50
  }
30
51
 
31
- action pattern_keyword {
32
- @buffers[:annotation_definition] = @buffers[:annotation_definition] << domain(pattern())
52
+ action add_list_domain {
53
+ trace('DEFINE_ANNOTATION add_list_domain')
54
+ @list_domain = true
33
55
  }
34
56
 
35
- action url_keyword {
36
- @buffers[:annotation_definition] = @buffers[:annotation_definition] << domain(url())
57
+ action add_url_domain {
58
+ trace('DEFINE_ANNOTATION add_url_domain')
59
+ @url_domain = true
37
60
  }
38
61
 
39
- action pattern {
40
- keyword, domain = @buffers[:annotation_definition].children
41
- domain = domain(
42
- domain.children[0] << @buffers[:string])
43
- @buffers[:annotation_definition] = annotation_definition(keyword, domain)
62
+ action add_pattern_domain {
63
+ trace('DEFINE_ANNOTATION add_pattern_domain')
64
+ @pattern_domain = true
44
65
  }
45
66
 
46
- action url {
47
- keyword, domain = @buffers[:annotation_definition].children
48
- domain = domain(
49
- domain.children[0] << @buffers[:string])
50
- @buffers[:annotation_definition] = annotation_definition(keyword, domain)
67
+ action define_annotation_end {
68
+ trace('DEFINE_ANNOTATION define_annotation_end')
69
+ annotation_definition_node = annotation_definition()
70
+ domain = @buffers.delete(:annotation_definition_domain)
71
+ unless domain.nil?
72
+ annotation_definition_node <<= domain
73
+ annotation_definition_node.complete = domain.complete
74
+ end
75
+ @buffers[:annotation_definition] = annotation_definition_node
51
76
  }
52
77
 
53
- action list {
54
- keyword, domain = @buffers[:annotation_definition].children
55
- domain = domain(
56
- @buffers[:list])
57
- @buffers[:annotation_definition] = annotation_definition(keyword, domain)
78
+ action yield_define_annotation {
79
+ trace('DEFINE_ANNOTATION yield_define_annotation')
80
+ yield @buffers[:annotation_definition]
58
81
  }
59
82
 
60
- action yield_annotation_definition {
61
- yield @buffers[:annotation_definition]
83
+ action define_annotation_node_eof {
84
+ trace('DEFINE_ANNOTATION define_annotation_node_eof')
85
+ annotation_definition_node = annotation_definition()
86
+ if @url_domain
87
+ domain_node = domain(url())
88
+ elsif @pattern_domain
89
+ domain_node = domain(pattern())
90
+ else
91
+ domain_node = domain()
92
+ end
93
+
94
+ domain_node.complete = false
95
+ list_node = @buffers.delete(:list)
96
+ unless list_node.nil?
97
+ domain_node <<= list_node
98
+ domain_node.complete = list_node.complete
99
+ end
100
+ string_node = @buffers.delete(:string)
101
+ unless string_node.nil?
102
+ domain_node <<= string_node
103
+ domain_node.complete = string_node.complete
104
+ end
105
+ annotation_definition_node <<= domain_node
106
+ annotation_definition_node.complete = domain_node.complete
107
+ yield annotation_definition_node
62
108
  }
63
109
 
64
- # Define FSM
65
- annotation_definition :=
66
- DEFINE_KW SP+ ANNOTATION_KW @annotation_keyword SP+
67
- IDENT %keyword SP+
68
- AS_KW SP+
69
- (
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
- );
110
+ string_value =
111
+ a_string
112
+ %add_string_value
113
+ ;
114
+
115
+ list_value =
116
+ a_list
117
+ %add_list_value
118
+ ;
119
+
120
+ value =
121
+ string_value |
122
+ list_value
123
+ ;
124
+
125
+ list_domain =
126
+ KW_LIST
127
+ %add_list_domain
128
+ ;
129
+
130
+ url_domain =
131
+ KW_URL
132
+ %add_url_domain
133
+ ;
134
+
135
+ pattern_domain =
136
+ KW_PATTERN
137
+ %add_pattern_domain
138
+ ;
139
+
140
+ domain =
141
+ list_domain |
142
+ url_domain |
143
+ pattern_domain
144
+ ;
145
+
146
+ define_annotation_node :=
147
+ DEFINE_ANNOTATION
148
+ SP+
149
+ an_ident
150
+ %add_name
151
+ SP+
152
+ KW_AS
153
+ SP+
154
+ domain
155
+ SP+
156
+ value
157
+ @eof(define_annotation_node_eof)
158
+ %define_annotation_end
159
+ %yield_define_annotation
160
+ ;
74
161
  }%%
75
162
  =end
76
163
  # end: ragel
@@ -78,6 +165,7 @@
78
165
  require_relative '../ast/node'
79
166
  require_relative '../mixin/buffer'
80
167
  require_relative '../nonblocking_io_wrapper'
168
+ require_relative '../tracer'
81
169
 
82
170
  module BELParser
83
171
  module Parsers
@@ -103,25 +191,30 @@ module BELParser
103
191
  include Enumerable
104
192
  include BELParser::Parsers::Buffer
105
193
  include BELParser::Parsers::AST::Sexp
194
+ include BELParser::Parsers::Tracer
106
195
 
107
196
  def initialize(content)
108
197
  @content = content
109
- # begin: ragel
198
+ # begin: ragel
110
199
  %% write data;
111
- # end: ragel
200
+ # end: ragel
112
201
  end
113
202
 
114
203
  def each
115
204
  @buffers = {}
205
+ @incomplete = {}
206
+ @list_domain = false
207
+ @url_domain = false
208
+ @pattern_domain = false
116
209
  data = @content.unpack('C*')
117
210
  p = 0
118
211
  pe = data.length
119
212
  eof = data.length
120
213
 
121
- # begin: ragel
214
+ # begin: ragel
122
215
  %% write init;
123
216
  %% write exec;
124
- # end: ragel
217
+ # end: ragel
125
218
  end
126
219
  end
127
220
  end