antlr4-native 2.1.0 → 2.2.1
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/README.md +1 -0
- data/lib/antlr4-native/generator.rb +4 -4
- data/lib/antlr4-native/version.rb +1 -1
- data/spec/lua-parser-rb/Gemfile +12 -0
- data/spec/lua-parser-rb/Lua.g4 +335 -0
- data/spec/lua-parser-rb/Rakefile +28 -0
- data/spec/lua-parser-rb/ext/lua_parser/extconf.rb +38 -0
- data/spec/lua-parser-rb/lib/lua_parser/version.rb +3 -0
- data/spec/lua-parser-rb/lib/lua_parser.rb +2 -0
- data/spec/lua-parser-rb/lua_parser.gemspec +31 -0
- data/spec/lua-parser-rb/parse_test.rb +20 -0
- data/spec/run-lua-test.sh +5 -0
- metadata +12 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 417a38bde6ca6dfdeca982ed80f0258c00c18feeda5cfecbaab7a5784e941501
|
4
|
+
data.tar.gz: 99531b3de905a08734dc2f421dc8b4e488850ab0021a6619c0581c6a810590d7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bad5784b07eb34c221c4a1a7a8311dd9c6998a837c5b5f13605564367aa15269055c3046e4894d531b4e9512467200896f0eb0495f08f46972593367d1143012
|
7
|
+
data.tar.gz: a0f02bfbbbff0fb8d06849623f8ced4046ebb2feb28a1f21d48bd03f2d017887c41a289777f30f4016205d01a49e3c77d8df9a83352a9da6b05ba43dc81148b3
|
data/README.md
CHANGED
@@ -79,6 +79,7 @@ Finally, if you override `#initialize` in your visitor subclasses, don't forget
|
|
79
79
|
|
80
80
|
## Caveats
|
81
81
|
|
82
|
+
1. Avoid retaining references to contexts, tokens, etc anywhere in your Ruby code. Contexts (i.e. the `ctx` variables in the examples above) and other objects that are created by ANTLR's C++ runtime are automatically cleaned up without the Ruby interpreter's knowledge. You'll almost surely see a segfault if you retain a reference to one of these objects and try to use it after the call to `Parser#visit`.
|
82
83
|
1. Due to an ANTLR limitation, parsers cannot be used in a multi-threaded environment, even if each parser instance is used entirely in the context of a single thread (i.e. parsers are not shared between threads). According to the ANTLR C++ developers, parsers should be threadsafe. Unfortunately firsthand experience has proven otherwise. Your mileage may vary.
|
83
84
|
1. The description of this gem says "(almost) any ANTLR4 grammar" because many grammars contain target-specific code. For example, the Python3 grammar referenced in the examples above contains inline Java code that the C++ compiler won't understand. You'll need to port any such code to C++ before you'll be able to compile and use the native extension.
|
84
85
|
|
@@ -25,7 +25,7 @@ module Antlr4Native
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def gem_name
|
28
|
-
@gem_name ||=
|
28
|
+
@gem_name ||= underscore(parser_ns)
|
29
29
|
end
|
30
30
|
|
31
31
|
def antlr_ns
|
@@ -316,7 +316,7 @@ module Antlr4Native
|
|
316
316
|
<<~END
|
317
317
|
extern "C"
|
318
318
|
void Init_#{ext_name}() {
|
319
|
-
Module rb_m#{parser_ns} = define_module("#{parser_ns}");
|
319
|
+
Module rb_m#{parser_ns} = define_module("#{capitalize(parser_ns)}");
|
320
320
|
|
321
321
|
rb_cToken = define_class_under<Token>(rb_m#{parser_ns}, "Token")
|
322
322
|
.define_method("text", &Token::getText)
|
@@ -346,8 +346,8 @@ module Antlr4Native
|
|
346
346
|
rb_cParser = define_class_under<ParserProxy>(rb_m#{parser_ns}, "Parser")
|
347
347
|
.define_singleton_function("parse", &ParserProxy::parse)
|
348
348
|
.define_singleton_function("parse_file", &ParserProxy::parseFile)
|
349
|
-
.define_method("#{parser_root_method}", &ParserProxy::#{parser_root_method}
|
350
|
-
.define_method("visit", &ParserProxy::visit
|
349
|
+
.define_method("#{parser_root_method}", &ParserProxy::#{parser_root_method})
|
350
|
+
.define_method("visit", &ParserProxy::visit);
|
351
351
|
|
352
352
|
#{class_wrappers_str(' ')}
|
353
353
|
}
|
@@ -0,0 +1,335 @@
|
|
1
|
+
/*
|
2
|
+
BSD License
|
3
|
+
|
4
|
+
Copyright (c) 2013, Kazunori Sakamoto
|
5
|
+
Copyright (c) 2016, Alexander Alexeev
|
6
|
+
All rights reserved.
|
7
|
+
|
8
|
+
Redistribution and use in source and binary forms, with or without
|
9
|
+
modification, are permitted provided that the following conditions
|
10
|
+
are met:
|
11
|
+
|
12
|
+
1. Redistributions of source code must retain the above copyright
|
13
|
+
notice, this list of conditions and the following disclaimer.
|
14
|
+
2. Redistributions in binary form must reproduce the above copyright
|
15
|
+
notice, this list of conditions and the following disclaimer in the
|
16
|
+
documentation and/or other materials provided with the distribution.
|
17
|
+
3. Neither the NAME of Rainer Schuster nor the NAMEs of its contributors
|
18
|
+
may be used to endorse or promote products derived from this software
|
19
|
+
without specific prior written permission.
|
20
|
+
|
21
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
22
|
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
23
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
24
|
+
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
25
|
+
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
26
|
+
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
27
|
+
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
28
|
+
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
29
|
+
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
30
|
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
31
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
32
|
+
|
33
|
+
This grammar file derived from:
|
34
|
+
|
35
|
+
Lua 5.3 Reference Manual
|
36
|
+
http://www.lua.org/manual/5.3/manual.html
|
37
|
+
|
38
|
+
Lua 5.2 Reference Manual
|
39
|
+
http://www.lua.org/manual/5.2/manual.html
|
40
|
+
|
41
|
+
Lua 5.1 grammar written by Nicolai Mainiero
|
42
|
+
http://www.antlr3.org/grammar/1178608849736/Lua.g
|
43
|
+
|
44
|
+
Tested by Kazunori Sakamoto with Test suite for Lua 5.2 (http://www.lua.org/tests/5.2/)
|
45
|
+
|
46
|
+
Tested by Alexander Alexeev with Test suite for Lua 5.3 http://www.lua.org/tests/lua-5.3.2-tests.tar.gz
|
47
|
+
*/
|
48
|
+
|
49
|
+
grammar Lua;
|
50
|
+
|
51
|
+
chunk
|
52
|
+
: block EOF
|
53
|
+
;
|
54
|
+
|
55
|
+
block
|
56
|
+
: stat* retstat?
|
57
|
+
;
|
58
|
+
|
59
|
+
stat
|
60
|
+
: ';'
|
61
|
+
| varlist '=' explist
|
62
|
+
| functioncall
|
63
|
+
| label
|
64
|
+
| 'break'
|
65
|
+
| 'goto' NAME
|
66
|
+
| 'do' block 'end'
|
67
|
+
| 'while' exp 'do' block 'end'
|
68
|
+
| 'repeat' block 'until' exp
|
69
|
+
| 'if' exp 'then' block ('elseif' exp 'then' block)* ('else' block)? 'end'
|
70
|
+
| 'for' NAME '=' exp ',' exp (',' exp)? 'do' block 'end'
|
71
|
+
| 'for' namelist 'in' explist 'do' block 'end'
|
72
|
+
| 'function' funcname funcbody
|
73
|
+
| 'local' 'function' NAME funcbody
|
74
|
+
| 'local' namelist ('=' explist)?
|
75
|
+
;
|
76
|
+
|
77
|
+
retstat
|
78
|
+
: 'return' explist? ';'?
|
79
|
+
;
|
80
|
+
|
81
|
+
label
|
82
|
+
: '::' NAME '::'
|
83
|
+
;
|
84
|
+
|
85
|
+
funcname
|
86
|
+
: NAME ('.' NAME)* (':' NAME)?
|
87
|
+
;
|
88
|
+
|
89
|
+
varlist
|
90
|
+
: var (',' var)*
|
91
|
+
;
|
92
|
+
|
93
|
+
namelist
|
94
|
+
: NAME (',' NAME)*
|
95
|
+
;
|
96
|
+
|
97
|
+
explist
|
98
|
+
: exp (',' exp)*
|
99
|
+
;
|
100
|
+
|
101
|
+
exp
|
102
|
+
: 'nil' | 'false' | 'true'
|
103
|
+
| number
|
104
|
+
| string
|
105
|
+
| '...'
|
106
|
+
| functiondef
|
107
|
+
| prefixexp
|
108
|
+
| tableconstructor
|
109
|
+
| <assoc=right> exp operatorPower exp
|
110
|
+
| operatorUnary exp
|
111
|
+
| exp operatorMulDivMod exp
|
112
|
+
| exp operatorAddSub exp
|
113
|
+
| <assoc=right> exp operatorStrcat exp
|
114
|
+
| exp operatorComparison exp
|
115
|
+
| exp operatorAnd exp
|
116
|
+
| exp operatorOr exp
|
117
|
+
| exp operatorBitwise exp
|
118
|
+
;
|
119
|
+
|
120
|
+
prefixexp
|
121
|
+
: varOrExp nameAndArgs*
|
122
|
+
;
|
123
|
+
|
124
|
+
functioncall
|
125
|
+
: varOrExp nameAndArgs+
|
126
|
+
;
|
127
|
+
|
128
|
+
varOrExp
|
129
|
+
: var | '(' exp ')'
|
130
|
+
;
|
131
|
+
|
132
|
+
var
|
133
|
+
: (NAME | '(' exp ')' varSuffix) varSuffix*
|
134
|
+
;
|
135
|
+
|
136
|
+
varSuffix
|
137
|
+
: nameAndArgs* ('[' exp ']' | '.' NAME)
|
138
|
+
;
|
139
|
+
|
140
|
+
nameAndArgs
|
141
|
+
: (':' NAME)? args
|
142
|
+
;
|
143
|
+
|
144
|
+
/*
|
145
|
+
var
|
146
|
+
: NAME | prefixexp '[' exp ']' | prefixexp '.' NAME
|
147
|
+
;
|
148
|
+
|
149
|
+
prefixexp
|
150
|
+
: var | functioncall | '(' exp ')'
|
151
|
+
;
|
152
|
+
|
153
|
+
functioncall
|
154
|
+
: prefixexp args | prefixexp ':' NAME args
|
155
|
+
;
|
156
|
+
*/
|
157
|
+
|
158
|
+
args
|
159
|
+
: '(' explist? ')' | tableconstructor | string
|
160
|
+
;
|
161
|
+
|
162
|
+
functiondef
|
163
|
+
: 'function' funcbody
|
164
|
+
;
|
165
|
+
|
166
|
+
funcbody
|
167
|
+
: '(' parlist? ')' block 'end'
|
168
|
+
;
|
169
|
+
|
170
|
+
parlist
|
171
|
+
: namelist (',' '...')? | '...'
|
172
|
+
;
|
173
|
+
|
174
|
+
tableconstructor
|
175
|
+
: '{' fieldlist? '}'
|
176
|
+
;
|
177
|
+
|
178
|
+
fieldlist
|
179
|
+
: field (fieldsep field)* fieldsep?
|
180
|
+
;
|
181
|
+
|
182
|
+
field
|
183
|
+
: '[' exp ']' '=' exp | NAME '=' exp | exp
|
184
|
+
;
|
185
|
+
|
186
|
+
fieldsep
|
187
|
+
: ',' | ';'
|
188
|
+
;
|
189
|
+
|
190
|
+
operatorOr
|
191
|
+
: 'or';
|
192
|
+
|
193
|
+
operatorAnd
|
194
|
+
: 'and';
|
195
|
+
|
196
|
+
operatorComparison
|
197
|
+
: '<' | '>' | '<=' | '>=' | '~=' | '==';
|
198
|
+
|
199
|
+
operatorStrcat
|
200
|
+
: '..';
|
201
|
+
|
202
|
+
operatorAddSub
|
203
|
+
: '+' | '-';
|
204
|
+
|
205
|
+
operatorMulDivMod
|
206
|
+
: '*' | '/' | '%' | '//';
|
207
|
+
|
208
|
+
operatorBitwise
|
209
|
+
: '&' | '|' | '~' | '<<' | '>>';
|
210
|
+
|
211
|
+
operatorUnary
|
212
|
+
: 'not' | '#' | '-' | '~';
|
213
|
+
|
214
|
+
operatorPower
|
215
|
+
: '^';
|
216
|
+
|
217
|
+
number
|
218
|
+
: INT | HEX | FLOAT | HEX_FLOAT
|
219
|
+
;
|
220
|
+
|
221
|
+
string
|
222
|
+
: NORMALSTRING | CHARSTRING | LONGSTRING
|
223
|
+
;
|
224
|
+
|
225
|
+
// LEXER
|
226
|
+
|
227
|
+
NAME
|
228
|
+
: [a-zA-Z_][a-zA-Z_0-9]*
|
229
|
+
;
|
230
|
+
|
231
|
+
NORMALSTRING
|
232
|
+
: '"' ( EscapeSequence | ~('\\'|'"') )* '"'
|
233
|
+
;
|
234
|
+
|
235
|
+
CHARSTRING
|
236
|
+
: '\'' ( EscapeSequence | ~('\''|'\\') )* '\''
|
237
|
+
;
|
238
|
+
|
239
|
+
LONGSTRING
|
240
|
+
: '[' NESTED_STR ']'
|
241
|
+
;
|
242
|
+
|
243
|
+
fragment
|
244
|
+
NESTED_STR
|
245
|
+
: '=' NESTED_STR '='
|
246
|
+
| '[' .*? ']'
|
247
|
+
;
|
248
|
+
|
249
|
+
INT
|
250
|
+
: Digit+
|
251
|
+
;
|
252
|
+
|
253
|
+
HEX
|
254
|
+
: '0' [xX] HexDigit+
|
255
|
+
;
|
256
|
+
|
257
|
+
FLOAT
|
258
|
+
: Digit+ '.' Digit* ExponentPart?
|
259
|
+
| '.' Digit+ ExponentPart?
|
260
|
+
| Digit+ ExponentPart
|
261
|
+
;
|
262
|
+
|
263
|
+
HEX_FLOAT
|
264
|
+
: '0' [xX] HexDigit+ '.' HexDigit* HexExponentPart?
|
265
|
+
| '0' [xX] '.' HexDigit+ HexExponentPart?
|
266
|
+
| '0' [xX] HexDigit+ HexExponentPart
|
267
|
+
;
|
268
|
+
|
269
|
+
fragment
|
270
|
+
ExponentPart
|
271
|
+
: [eE] [+-]? Digit+
|
272
|
+
;
|
273
|
+
|
274
|
+
fragment
|
275
|
+
HexExponentPart
|
276
|
+
: [pP] [+-]? Digit+
|
277
|
+
;
|
278
|
+
|
279
|
+
fragment
|
280
|
+
EscapeSequence
|
281
|
+
: '\\' [abfnrtvz"'\\]
|
282
|
+
| '\\' '\r'? '\n'
|
283
|
+
| DecimalEscape
|
284
|
+
| HexEscape
|
285
|
+
| UtfEscape
|
286
|
+
;
|
287
|
+
|
288
|
+
fragment
|
289
|
+
DecimalEscape
|
290
|
+
: '\\' Digit
|
291
|
+
| '\\' Digit Digit
|
292
|
+
| '\\' [0-2] Digit Digit
|
293
|
+
;
|
294
|
+
|
295
|
+
fragment
|
296
|
+
HexEscape
|
297
|
+
: '\\' 'x' HexDigit HexDigit
|
298
|
+
;
|
299
|
+
|
300
|
+
fragment
|
301
|
+
UtfEscape
|
302
|
+
: '\\' 'u{' HexDigit+ '}'
|
303
|
+
;
|
304
|
+
|
305
|
+
fragment
|
306
|
+
Digit
|
307
|
+
: [0-9]
|
308
|
+
;
|
309
|
+
|
310
|
+
fragment
|
311
|
+
HexDigit
|
312
|
+
: [0-9a-fA-F]
|
313
|
+
;
|
314
|
+
|
315
|
+
COMMENT
|
316
|
+
: '--[' NESTED_STR ']' -> channel(HIDDEN)
|
317
|
+
;
|
318
|
+
|
319
|
+
LINE_COMMENT
|
320
|
+
: '--'
|
321
|
+
( // --
|
322
|
+
| '[' '='* // --[==
|
323
|
+
| '[' '='* ~('='|'['|'\r'|'\n') ~('\r'|'\n')* // --[==AA
|
324
|
+
| ~('['|'\r'|'\n') ~('\r'|'\n')* // --AAA
|
325
|
+
) ('\r\n'|'\r'|'\n'|EOF)
|
326
|
+
-> channel(HIDDEN)
|
327
|
+
;
|
328
|
+
|
329
|
+
WS
|
330
|
+
: [ \t\u000C\r\n]+ -> skip
|
331
|
+
;
|
332
|
+
|
333
|
+
SHEBANG
|
334
|
+
: '#' '!' ~('\n'|'\r')* -> channel(HIDDEN)
|
335
|
+
;
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
|
3
|
+
require 'antlr4-native'
|
4
|
+
require 'etc'
|
5
|
+
|
6
|
+
def ruby_installer?
|
7
|
+
Object.const_defined?(:RubyInstaller)
|
8
|
+
end
|
9
|
+
|
10
|
+
Bundler::GemHelper.install_tasks
|
11
|
+
|
12
|
+
task :generate do
|
13
|
+
generator = Antlr4Native::Generator.new(
|
14
|
+
grammar_files: ["./Lua.g4"],
|
15
|
+
output_dir: 'ext/',
|
16
|
+
parser_root_method: 'chunk'
|
17
|
+
)
|
18
|
+
|
19
|
+
generator.generate
|
20
|
+
end
|
21
|
+
|
22
|
+
task :compile do
|
23
|
+
Dir.chdir(File.join(%w(ext lua_parser))) do
|
24
|
+
load 'extconf.rb'
|
25
|
+
RubyInstaller::Runtime.enable_msys_apps if ruby_installer?
|
26
|
+
exec "make -j #{Etc.nprocessors}"
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'mkmf-rice'
|
2
|
+
|
3
|
+
extension_name = 'lua_parser'
|
4
|
+
dir_config(extension_name)
|
5
|
+
|
6
|
+
have_library('stdc++')
|
7
|
+
|
8
|
+
$CFLAGS << ' -std=c++14'
|
9
|
+
|
10
|
+
if enable_config('static')
|
11
|
+
$defs.push '-DANTLR4CPP_STATIC' unless $defs.include?('-DANTLR4CPP_STATIC')
|
12
|
+
end
|
13
|
+
|
14
|
+
include_paths = [
|
15
|
+
'.',
|
16
|
+
'antlrgen',
|
17
|
+
'antlr4-upstream/runtime/Cpp/runtime/src',
|
18
|
+
'antlr4-upstream/runtime/Cpp/runtime/src/atn',
|
19
|
+
'antlr4-upstream/runtime/Cpp/runtime/src/dfa',
|
20
|
+
'antlr4-upstream/runtime/Cpp/runtime/src/misc',
|
21
|
+
'antlr4-upstream/runtime/Cpp/runtime/src/support',
|
22
|
+
'antlr4-upstream/runtime/Cpp/runtime/src/tree',
|
23
|
+
'antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern',
|
24
|
+
'antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath'
|
25
|
+
]
|
26
|
+
|
27
|
+
$srcs = []
|
28
|
+
|
29
|
+
include_paths.each do |include_path|
|
30
|
+
$INCFLAGS << " -I#{include_path}"
|
31
|
+
$VPATH << include_path
|
32
|
+
|
33
|
+
Dir.glob("#{include_path}/*.cpp").each do |path|
|
34
|
+
$srcs << path
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
create_makefile(extension_name)
|
@@ -0,0 +1,31 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), 'lib')
|
2
|
+
require 'lua_parser/version'
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = 'lua_parser'
|
6
|
+
s.version = ::LuaParser::VERSION
|
7
|
+
s.authors = ['Mickey Mouse']
|
8
|
+
s.email = ['mickey@disney.com']
|
9
|
+
s.homepage = 'https://github.com/mickeymouse/lua-parser-rb'
|
10
|
+
|
11
|
+
s.description = s.summary = 'A Lua parser for Ruby'
|
12
|
+
|
13
|
+
s.platform = Gem::Platform::RUBY
|
14
|
+
|
15
|
+
s.add_dependency 'rice', '~> 4.0'
|
16
|
+
|
17
|
+
s.extensions = File.join(*%w(ext lua_parser extconf.rb))
|
18
|
+
|
19
|
+
s.require_path = 'lib'
|
20
|
+
s.files = Dir[
|
21
|
+
'{lib,spec}/**/*',
|
22
|
+
'ext/lua_parser/*.{cpp,h}',
|
23
|
+
'ext/lua_parser/extconf.rb',
|
24
|
+
'ext/lua_parser/antlrgen/*',
|
25
|
+
'ext/lua_parser/antlr4-upstream/runtime/Cpp/runtime/src/**/*.{cpp,h}',
|
26
|
+
'Gemfile',
|
27
|
+
'README.md',
|
28
|
+
'Rakefile',
|
29
|
+
'lua_parser.gemspec'
|
30
|
+
]
|
31
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "lua_parser"
|
4
|
+
|
5
|
+
class FuncVisitor < LuaParser::Visitor
|
6
|
+
def visit_functioncall(ctx)
|
7
|
+
puts ctx.var_or_exp.text
|
8
|
+
visit_children(ctx)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
Dir.glob('lua/**/*.lua').each do |file_name|
|
13
|
+
# this file contains some weird non-UTF8 strings, so let's just skip it
|
14
|
+
next if File.basename(file_name) == "strings.lua"
|
15
|
+
|
16
|
+
lua_code = File.read(file_name)
|
17
|
+
parser = LuaParser::Parser.parse(lua_code)
|
18
|
+
visitor = FuncVisitor.new
|
19
|
+
parser.visit(visitor)
|
20
|
+
end
|
@@ -0,0 +1,5 @@
|
|
1
|
+
#! /bin/bash
|
2
|
+
|
3
|
+
antlr_version=$(bundle exec ruby -Ilib -rantlr4-native -e "puts Antlr4Native::Generator::ANTLR_VERSION")
|
4
|
+
docker build --build-arg ANTLR_VERSION="${antlr_version}" -t antlr4-native-rb:latest .
|
5
|
+
docker run -t antlr4-native-rb:latest bundle exec ruby parse_test.rb
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: antlr4-native
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1
|
4
|
+
version: 2.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cameron Dutro
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-10-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rice
|
@@ -43,6 +43,15 @@ files:
|
|
43
43
|
- lib/antlr4-native/string_helpers.rb
|
44
44
|
- lib/antlr4-native/version.rb
|
45
45
|
- lib/antlr4-native/visitor_generator.rb
|
46
|
+
- spec/lua-parser-rb/Gemfile
|
47
|
+
- spec/lua-parser-rb/Lua.g4
|
48
|
+
- spec/lua-parser-rb/Rakefile
|
49
|
+
- spec/lua-parser-rb/ext/lua_parser/extconf.rb
|
50
|
+
- spec/lua-parser-rb/lib/lua_parser.rb
|
51
|
+
- spec/lua-parser-rb/lib/lua_parser/version.rb
|
52
|
+
- spec/lua-parser-rb/lua_parser.gemspec
|
53
|
+
- spec/lua-parser-rb/parse_test.rb
|
54
|
+
- spec/run-lua-test.sh
|
46
55
|
- vendor/antlr-4.10.1-complete.jar
|
47
56
|
homepage: http://github.com/camertron/antlr4-native-rb
|
48
57
|
licenses: []
|
@@ -62,7 +71,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
62
71
|
- !ruby/object:Gem::Version
|
63
72
|
version: '0'
|
64
73
|
requirements: []
|
65
|
-
rubygems_version: 3.
|
74
|
+
rubygems_version: 3.4.5
|
66
75
|
signing_key:
|
67
76
|
specification_version: 4
|
68
77
|
summary: Create a Ruby native extension from any ANTLR4 grammar.
|