bel_parser 1.0.0.alpha.38-java → 1.0.0.alpha.39-java
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 +6 -2
- data/lib/bel_parser/parsers/ast/node.rb +113 -58
- data/lib/bel_parser/parsers/bel_script/define_annotation.rb +4175 -3097
- data/lib/bel_parser/parsers/bel_script/define_annotation.rl +142 -49
- data/lib/bel_parser/parsers/bel_script/define_namespace.rb +980 -461
- data/lib/bel_parser/parsers/bel_script/define_namespace.rl +79 -39
- data/lib/bel_parser/parsers/bel_script/set.rb +4878 -2743
- data/lib/bel_parser/parsers/bel_script/set.rl +114 -32
- data/lib/bel_parser/parsers/bel_script/set_document.rb +5839 -5292
- data/lib/bel_parser/parsers/bel_script/set_document.rl +130 -27
- data/lib/bel_parser/parsers/bel_script/unset.rb +321 -234
- data/lib/bel_parser/parsers/bel_script/unset.rl +49 -21
- data/lib/bel_parser/parsers/common/blank_line.rb +12 -11
- data/lib/bel_parser/parsers/common/blank_line.rl +12 -12
- data/lib/bel_parser/parsers/common/comment_line.rb +65 -40
- data/lib/bel_parser/parsers/common/comment_line.rl +26 -26
- data/lib/bel_parser/parsers/common/common.rl +60 -0
- data/lib/bel_parser/parsers/common/function.rb +319 -0
- data/lib/bel_parser/parsers/common/function.rl +149 -0
- data/lib/bel_parser/parsers/common/identifier.rb +72 -68
- data/lib/bel_parser/parsers/common/identifier.rl +73 -29
- data/lib/bel_parser/parsers/common/list.rb +1617 -1243
- data/lib/bel_parser/parsers/common/list.rl +120 -60
- data/lib/bel_parser/parsers/common/string.rb +114 -41
- data/lib/bel_parser/parsers/common/string.rl +91 -28
- data/lib/bel_parser/parsers/common.rb +1 -0
- data/lib/bel_parser/parsers/expression/comment.rb +70 -38
- data/lib/bel_parser/parsers/expression/comment.rl +37 -20
- data/lib/bel_parser/parsers/expression/nested_statement.rb +63116 -13958
- data/lib/bel_parser/parsers/expression/nested_statement.rl +53 -23
- data/lib/bel_parser/parsers/expression/observed_term.rb +32497 -5188
- data/lib/bel_parser/parsers/expression/observed_term.rl +25 -20
- data/lib/bel_parser/parsers/expression/parameter.rb +2861 -847
- data/lib/bel_parser/parsers/expression/parameter.rl +178 -21
- data/lib/bel_parser/parsers/expression/relationship.rb +73 -55
- data/lib/bel_parser/parsers/expression/relationship.rl +41 -23
- data/lib/bel_parser/parsers/expression/simple_statement.rb +42895 -7846
- data/lib/bel_parser/parsers/expression/simple_statement.rl +41 -24
- data/lib/bel_parser/parsers/expression/term.rb +16498 -2602
- data/lib/bel_parser/parsers/expression/term.rl +52 -35
- data/lib/bel_parser/parsers/line_parser.rb +1 -0
- data/lib/bel_parser/parsers/mixin/buffer.rb +4 -0
- data/lib/bel_parser/parsers/tracer.rb +19 -0
- data/lib/bel_parser/script/state/namespace_definition.rb +1 -0
- metadata +10 -7
@@ -6,25 +6,50 @@
|
|
6
6
|
include 'common.rl';
|
7
7
|
include 'identifier.rl';
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
@buffers[:
|
9
|
+
action add_name {
|
10
|
+
trace('UNSET add_name')
|
11
|
+
key = @buffers.delete(:ident)
|
12
|
+
@buffers[:unset_name] = key
|
13
13
|
}
|
14
14
|
|
15
|
-
action
|
16
|
-
|
15
|
+
action unset_end {
|
16
|
+
trace('UNSET unset_end')
|
17
|
+
name = @buffers.delete(:unset_name)
|
18
|
+
unless name.nil?
|
19
|
+
unset_node = unset(name, complete: name.complete)
|
20
|
+
else
|
21
|
+
unset_node = unset(complete: false)
|
22
|
+
end
|
23
|
+
@buffers[:unset] = unset_node
|
17
24
|
}
|
18
25
|
|
19
|
-
action
|
26
|
+
action yield_unset {
|
27
|
+
trace('UNSET yield_unset')
|
20
28
|
yield @buffers[:unset]
|
21
29
|
}
|
22
30
|
|
23
|
-
|
24
|
-
UNSET
|
31
|
+
action set_node_eof {
|
32
|
+
trace('UNSET set_node_eof')
|
33
|
+
}
|
34
|
+
|
35
|
+
an_unset =
|
36
|
+
KW_UNSET
|
25
37
|
SP+
|
26
|
-
|
27
|
-
|
38
|
+
an_ident
|
39
|
+
%add_name
|
40
|
+
@eof(set_node_eof)
|
41
|
+
%unset_end
|
42
|
+
;
|
43
|
+
|
44
|
+
unset_ast_node :=
|
45
|
+
KW_UNSET
|
46
|
+
SP+?
|
47
|
+
an_ident?
|
48
|
+
%add_name
|
49
|
+
@eof(set_node_eof)
|
50
|
+
%unset_end
|
51
|
+
%yield_unset
|
52
|
+
;
|
28
53
|
}%%
|
29
54
|
=end
|
30
55
|
# end: ragel
|
@@ -32,6 +57,7 @@
|
|
32
57
|
require_relative '../ast/node'
|
33
58
|
require_relative '../mixin/buffer'
|
34
59
|
require_relative '../nonblocking_io_wrapper'
|
60
|
+
require_relative '../tracer'
|
35
61
|
|
36
62
|
module BELParser
|
37
63
|
module Parsers
|
@@ -57,25 +83,27 @@ module BELParser
|
|
57
83
|
include Enumerable
|
58
84
|
include BELParser::Parsers::Buffer
|
59
85
|
include BELParser::Parsers::AST::Sexp
|
86
|
+
include BELParser::Parsers::Tracer
|
60
87
|
|
61
88
|
def initialize(content)
|
62
89
|
@content = content
|
63
|
-
# begin: ragel
|
90
|
+
# begin: ragel
|
64
91
|
%% write data;
|
65
|
-
# end: ragel
|
92
|
+
# end: ragel
|
66
93
|
end
|
67
94
|
|
68
95
|
def each
|
69
|
-
@buffers
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
96
|
+
@buffers = {}
|
97
|
+
@incomplete = {}
|
98
|
+
data = @content.unpack('C*')
|
99
|
+
p = 0
|
100
|
+
pe = data.length
|
101
|
+
eof = data.length
|
102
|
+
|
103
|
+
# begin: ragel
|
76
104
|
%% write init;
|
77
105
|
%% write exec;
|
78
|
-
# end: ragel
|
106
|
+
# end: ragel
|
79
107
|
end
|
80
108
|
end
|
81
109
|
end
|
@@ -37,7 +37,7 @@ module BELParser
|
|
37
37
|
|
38
38
|
def initialize(content)
|
39
39
|
@content = content
|
40
|
-
# begin: ragel
|
40
|
+
# begin: ragel
|
41
41
|
|
42
42
|
class << self
|
43
43
|
attr_accessor :_bel_trans_keys
|
@@ -98,28 +98,29 @@ self.bel_start = 1;
|
|
98
98
|
class << self
|
99
99
|
attr_accessor :bel_first_final
|
100
100
|
end
|
101
|
-
self.bel_first_final =
|
101
|
+
self.bel_first_final = 1;
|
102
102
|
class << self
|
103
103
|
attr_accessor :bel_error
|
104
104
|
end
|
105
105
|
self.bel_error = 0;
|
106
106
|
|
107
107
|
class << self
|
108
|
-
attr_accessor :
|
108
|
+
attr_accessor :bel_en_bl_ast
|
109
109
|
end
|
110
|
-
self.
|
110
|
+
self.bel_en_bl_ast = 1;
|
111
111
|
|
112
112
|
|
113
|
-
# end: ragel
|
113
|
+
# end: ragel
|
114
114
|
end
|
115
115
|
|
116
116
|
def each
|
117
|
-
@buffers
|
118
|
-
|
119
|
-
|
120
|
-
|
117
|
+
@buffers = {}
|
118
|
+
@incomplete = {}
|
119
|
+
data = @content.unpack('C*')
|
120
|
+
p = 0
|
121
|
+
pe = data.length
|
121
122
|
|
122
|
-
# begin: ragel
|
123
|
+
# begin: ragel
|
123
124
|
|
124
125
|
begin
|
125
126
|
p ||= 0
|
@@ -191,7 +192,7 @@ begin
|
|
191
192
|
end
|
192
193
|
end
|
193
194
|
|
194
|
-
# end: ragel
|
195
|
+
# end: ragel
|
195
196
|
end
|
196
197
|
end
|
197
198
|
end
|
@@ -5,13 +5,12 @@
|
|
5
5
|
|
6
6
|
include 'common.rl';
|
7
7
|
|
8
|
-
action
|
8
|
+
action blank_line_yield {
|
9
9
|
yield blank_line
|
10
10
|
}
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
blank := BLANK %yield_blank_line NL;
|
12
|
+
blank = SP*;
|
13
|
+
bl_ast := blank NL? @blank_line_yield;
|
15
14
|
}%%
|
16
15
|
=end
|
17
16
|
# end: ragel
|
@@ -47,21 +46,22 @@ module BELParser
|
|
47
46
|
|
48
47
|
def initialize(content)
|
49
48
|
@content = content
|
50
|
-
# begin: ragel
|
49
|
+
# begin: ragel
|
51
50
|
%% write data;
|
52
|
-
# end: ragel
|
51
|
+
# end: ragel
|
53
52
|
end
|
54
53
|
|
55
54
|
def each
|
56
|
-
@buffers
|
57
|
-
|
58
|
-
|
59
|
-
|
55
|
+
@buffers = {}
|
56
|
+
@incomplete = {}
|
57
|
+
data = @content.unpack('C*')
|
58
|
+
p = 0
|
59
|
+
pe = data.length
|
60
60
|
|
61
|
-
# begin: ragel
|
61
|
+
# begin: ragel
|
62
62
|
%% write init;
|
63
63
|
%% write exec;
|
64
|
-
# end: ragel
|
64
|
+
# end: ragel
|
65
65
|
end
|
66
66
|
end
|
67
67
|
end
|
@@ -37,15 +37,16 @@ module BELParser
|
|
37
37
|
|
38
38
|
def initialize(content)
|
39
39
|
@content = content
|
40
|
-
# begin: ragel
|
40
|
+
# begin: ragel
|
41
41
|
|
42
42
|
class << self
|
43
43
|
attr_accessor :_bel_trans_keys
|
44
44
|
private :_bel_trans_keys, :_bel_trans_keys=
|
45
45
|
end
|
46
46
|
self._bel_trans_keys = [
|
47
|
-
0, 0, 9, 35,
|
48
|
-
|
47
|
+
0, 0, 9, 35, 9, 35,
|
48
|
+
9, 32, 10, 10, 0,
|
49
|
+
0, 0
|
49
50
|
]
|
50
51
|
|
51
52
|
class << self
|
@@ -53,7 +54,7 @@ class << self
|
|
53
54
|
private :_bel_key_spans, :_bel_key_spans=
|
54
55
|
end
|
55
56
|
self._bel_key_spans = [
|
56
|
-
0, 27,
|
57
|
+
0, 27, 27, 24, 1, 0
|
57
58
|
]
|
58
59
|
|
59
60
|
class << self
|
@@ -61,7 +62,7 @@ class << self
|
|
61
62
|
private :_bel_index_offsets, :_bel_index_offsets=
|
62
63
|
end
|
63
64
|
self._bel_index_offsets = [
|
64
|
-
0, 0, 28,
|
65
|
+
0, 0, 28, 56, 81, 83
|
65
66
|
]
|
66
67
|
|
67
68
|
class << self
|
@@ -72,8 +73,14 @@ self._bel_indicies = [
|
|
72
73
|
0, 1, 1, 1, 1, 1, 1, 1,
|
73
74
|
1, 1, 1, 1, 1, 1, 1, 1,
|
74
75
|
1, 1, 1, 1, 1, 1, 1, 0,
|
75
|
-
1, 1, 2, 1,
|
76
|
-
1,
|
76
|
+
1, 1, 2, 1, 0, 3, 1, 1,
|
77
|
+
1, 1, 1, 1, 1, 1, 1, 1,
|
78
|
+
1, 1, 1, 1, 1, 1, 1, 1,
|
79
|
+
1, 1, 1, 0, 1, 1, 2, 1,
|
80
|
+
5, 6, 4, 4, 4, 4, 4, 4,
|
81
|
+
4, 4, 4, 4, 4, 4, 4, 4,
|
82
|
+
4, 4, 4, 4, 4, 4, 4, 5,
|
83
|
+
4, 3, 7, 1, 0
|
77
84
|
]
|
78
85
|
|
79
86
|
class << self
|
@@ -81,7 +88,7 @@ class << self
|
|
81
88
|
private :_bel_trans_targs, :_bel_trans_targs=
|
82
89
|
end
|
83
90
|
self._bel_trans_targs = [
|
84
|
-
1, 0,
|
91
|
+
1, 0, 3, 5, 4, 3, 5, 4
|
85
92
|
]
|
86
93
|
|
87
94
|
class << self
|
@@ -89,38 +96,49 @@ class << self
|
|
89
96
|
private :_bel_trans_actions, :_bel_trans_actions=
|
90
97
|
end
|
91
98
|
self._bel_trans_actions = [
|
92
|
-
0, 0, 0, 1,
|
99
|
+
0, 0, 0, 1, 3, 3, 4, 5
|
100
|
+
]
|
101
|
+
|
102
|
+
class << self
|
103
|
+
attr_accessor :_bel_eof_actions
|
104
|
+
private :_bel_eof_actions, :_bel_eof_actions=
|
105
|
+
end
|
106
|
+
self._bel_eof_actions = [
|
107
|
+
0, 0, 0, 2, 0, 0
|
93
108
|
]
|
94
109
|
|
95
110
|
class << self
|
96
111
|
attr_accessor :bel_start
|
97
112
|
end
|
98
|
-
self.bel_start =
|
113
|
+
self.bel_start = 2;
|
99
114
|
class << self
|
100
115
|
attr_accessor :bel_first_final
|
101
116
|
end
|
102
|
-
self.bel_first_final =
|
117
|
+
self.bel_first_final = 2;
|
103
118
|
class << self
|
104
119
|
attr_accessor :bel_error
|
105
120
|
end
|
106
121
|
self.bel_error = 0;
|
107
122
|
|
108
123
|
class << self
|
109
|
-
attr_accessor :
|
124
|
+
attr_accessor :bel_en_main
|
110
125
|
end
|
111
|
-
self.
|
126
|
+
self.bel_en_main = 2;
|
112
127
|
|
113
128
|
|
114
|
-
# end: ragel
|
129
|
+
# end: ragel
|
115
130
|
end
|
116
131
|
|
117
132
|
def each
|
118
|
-
@buffers
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
133
|
+
@buffers = {}
|
134
|
+
@started = false
|
135
|
+
@incomplete = {}
|
136
|
+
data = @content.unpack('C*')
|
137
|
+
p = 0
|
138
|
+
pe = data.length
|
139
|
+
eof = data.length
|
140
|
+
|
141
|
+
# begin: ragel
|
124
142
|
|
125
143
|
begin
|
126
144
|
p ||= 0
|
@@ -165,43 +183,39 @@ begin
|
|
165
183
|
cs = _bel_trans_targs[_trans]
|
166
184
|
if _bel_trans_actions[_trans] != 0
|
167
185
|
case _bel_trans_actions[_trans]
|
168
|
-
when
|
186
|
+
when 5 then
|
169
187
|
begin
|
170
188
|
|
171
|
-
@
|
189
|
+
@incomplete[:comment_line] << data[p].ord
|
172
190
|
end
|
173
191
|
when 1 then
|
174
192
|
begin
|
175
193
|
|
176
|
-
@
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
@buffers[:comment_line] << data[p].ord
|
181
|
-
end
|
182
|
-
when 4 then
|
183
|
-
begin
|
184
|
-
|
185
|
-
@buffers[:comment_line] = comment_line(
|
186
|
-
utf8_string(@buffers[:comment_line]))
|
194
|
+
cl = @incomplete.delete(:comment_line) || []
|
195
|
+
completed = @started
|
196
|
+
yield comment_line(utf8_string(cl), complete: completed)
|
187
197
|
end
|
198
|
+
when 3 then
|
188
199
|
begin
|
189
200
|
|
190
|
-
|
201
|
+
@incomplete[:comment_line] = []
|
202
|
+
@started = true
|
191
203
|
end
|
192
|
-
when 2 then
|
193
204
|
begin
|
194
205
|
|
195
|
-
@
|
206
|
+
@incomplete[:comment_line] << data[p].ord
|
196
207
|
end
|
208
|
+
when 4 then
|
197
209
|
begin
|
198
210
|
|
199
|
-
@
|
200
|
-
|
211
|
+
@incomplete[:comment_line] = []
|
212
|
+
@started = true
|
201
213
|
end
|
202
214
|
begin
|
203
215
|
|
204
|
-
|
216
|
+
cl = @incomplete.delete(:comment_line) || []
|
217
|
+
completed = @started
|
218
|
+
yield comment_line(utf8_string(cl), complete: completed)
|
205
219
|
end
|
206
220
|
end
|
207
221
|
end
|
@@ -218,6 +232,17 @@ begin
|
|
218
232
|
end
|
219
233
|
end
|
220
234
|
if _goto_level <= _test_eof
|
235
|
+
if p == eof
|
236
|
+
case _bel_eof_actions[cs]
|
237
|
+
when 2 then
|
238
|
+
begin
|
239
|
+
|
240
|
+
@incomplete[:comment_line] = []
|
241
|
+
@started = true
|
242
|
+
end
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
221
246
|
end
|
222
247
|
if _goto_level <= _out
|
223
248
|
break
|
@@ -225,7 +250,7 @@ begin
|
|
225
250
|
end
|
226
251
|
end
|
227
252
|
|
228
|
-
# end: ragel
|
253
|
+
# end: ragel
|
229
254
|
end
|
230
255
|
end
|
231
256
|
end
|
@@ -5,29 +5,26 @@
|
|
5
5
|
|
6
6
|
include 'common.rl';
|
7
7
|
|
8
|
-
action
|
9
|
-
@
|
8
|
+
action comment_line_start {
|
9
|
+
@incomplete[:comment_line] = []
|
10
|
+
@started = true
|
10
11
|
}
|
11
12
|
|
12
|
-
action
|
13
|
-
@
|
13
|
+
action comment_line_more {
|
14
|
+
@incomplete[:comment_line] << fc
|
14
15
|
}
|
15
16
|
|
16
|
-
action
|
17
|
-
@
|
18
|
-
|
17
|
+
action comment_line_yield {
|
18
|
+
cl = @incomplete.delete(:comment_line) || []
|
19
|
+
completed = @started
|
20
|
+
yield comment_line(utf8_string(cl), complete: completed)
|
19
21
|
}
|
20
22
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
SP*
|
27
|
-
NUMBER_SIGN
|
28
|
-
(any - NL)* >start_comment_line $append_comment_line %finish_comment_line;
|
29
|
-
|
30
|
-
comment_line := COMMENT_LINE %yield_comment_line NL;
|
23
|
+
comment_start = SP* NUMBER_SIGN SP*;
|
24
|
+
comment = comment_start (any - NL)*
|
25
|
+
>comment_line_start
|
26
|
+
$comment_line_more;
|
27
|
+
main := comment? NL? @comment_line_yield;
|
31
28
|
}%%
|
32
29
|
=end
|
33
30
|
# end: ragel
|
@@ -63,21 +60,24 @@ module BELParser
|
|
63
60
|
|
64
61
|
def initialize(content)
|
65
62
|
@content = content
|
66
|
-
# begin: ragel
|
63
|
+
# begin: ragel
|
67
64
|
%% write data;
|
68
|
-
# end: ragel
|
65
|
+
# end: ragel
|
69
66
|
end
|
70
67
|
|
71
68
|
def each
|
72
|
-
@buffers
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
69
|
+
@buffers = {}
|
70
|
+
@started = false
|
71
|
+
@incomplete = {}
|
72
|
+
data = @content.unpack('C*')
|
73
|
+
p = 0
|
74
|
+
pe = data.length
|
75
|
+
eof = data.length
|
76
|
+
|
77
|
+
# begin: ragel
|
78
78
|
%% write init;
|
79
79
|
%% write exec;
|
80
|
-
# end: ragel
|
80
|
+
# end: ragel
|
81
81
|
end
|
82
82
|
end
|
83
83
|
end
|
@@ -4,9 +4,69 @@ machine bel;
|
|
4
4
|
|
5
5
|
NL = '\n';
|
6
6
|
SP = ' ' | '\t';
|
7
|
+
WS = space;
|
7
8
|
EQL = '=';
|
8
9
|
NUMBER_SIGN = '#';
|
10
|
+
SQ = "'";
|
11
|
+
DQ = '"';
|
12
|
+
COLON = ':';
|
13
|
+
ESCAPED = /\\./;
|
14
|
+
NOT_SQESC = [^'\\];
|
15
|
+
NOT_DQESC = [^"\\];
|
16
|
+
COMMA_DELIM = SP* ',' SP*;
|
17
|
+
SS = '//';
|
18
|
+
ID_CHARS = [a-zA-Z0-9_]+;
|
19
|
+
LP = '(';
|
20
|
+
RP = ')';
|
9
21
|
|
22
|
+
KW_SET = /SET/i;
|
23
|
+
KW_UNSET = /UNSET/i;
|
24
|
+
KW_DEFINE = /DEFINE/i;
|
25
|
+
KW_ANNOTATION = /ANNOTATION/i;
|
26
|
+
KW_NAMESPACE = /NAMESPACE/i;
|
27
|
+
KW_AS = /AS/i;
|
28
|
+
KW_LIST = /LIST/i;
|
29
|
+
KW_PATTERN = /PATTERN/i;
|
30
|
+
KW_URL = /URL/i;
|
31
|
+
KW_DOCUMENT = /DOCUMENT/i;
|
32
|
+
KW_AUTHORS = /Authors/i;
|
33
|
+
KW_CONTACT_INFO = /ContactInfo/i;
|
34
|
+
KW_COPYRIGHT = /Copyright/i;
|
35
|
+
KW_DESCRIPTION = /Description/i;
|
36
|
+
KW_LICENSES = /Licenses/i;
|
37
|
+
KW_NAME = /Name/i;
|
38
|
+
KW_VERSION = /Version/i;
|
39
|
+
|
40
|
+
DOCUMENT_PROPERTY =
|
41
|
+
KW_AUTHORS |
|
42
|
+
KW_CONTACT_INFO |
|
43
|
+
KW_COPYRIGHT |
|
44
|
+
KW_DESCRIPTION |
|
45
|
+
KW_LICENSES |
|
46
|
+
KW_NAME |
|
47
|
+
KW_VERSION
|
48
|
+
;
|
49
|
+
|
50
|
+
DEFINE_ANNOTATION =
|
51
|
+
KW_DEFINE
|
52
|
+
SP+
|
53
|
+
KW_ANNOTATION
|
54
|
+
;
|
55
|
+
|
56
|
+
DEFINE_NAMESPACE =
|
57
|
+
KW_DEFINE
|
58
|
+
SP+
|
59
|
+
KW_NAMESPACE
|
60
|
+
;
|
61
|
+
|
62
|
+
RELATIONSHIP =
|
63
|
+
# ASCII range '!' to '~'
|
64
|
+
(33..126)+
|
65
|
+
;
|
66
|
+
|
67
|
+
FUNCTION =
|
68
|
+
(print - (' ' | "'" | '"' | '('))+
|
69
|
+
;
|
10
70
|
}%%
|
11
71
|
=end
|
12
72
|
# vim: ts=2 sw=2 ft=ragel:
|