redparse 0.8.0 → 0.8.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.
- data/History.txt +11 -0
- data/Manifest.txt +3 -0
- data/README.txt +10 -5
- data/Rakefile +5 -4
- data/bin/redparse +260 -0
- data/lib/redparse.rb +2 -2
- data/lib/redparse/node.rb +11 -1
- data/lib/redparse/version.rb +3 -0
- data/test/test_redparse.rb +22 -3
- metadata +22 -8
data/History.txt
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
=== 0.8.1 / 2009-04-21
|
2
|
+
* 4 minor enhancements:
|
3
|
+
* fixed embarassing permissions problems
|
4
|
+
* version.rb and History.txt were missing from the release
|
5
|
+
* I left off the dependancy on reg, oops!
|
6
|
+
* hacked up tests to ignore trivial compare errors
|
7
|
+
|
8
|
+
=== 0.8.0 / 2008-10-10
|
9
|
+
* 1 Major Enhancement:
|
10
|
+
* Birthday!
|
11
|
+
|
data/Manifest.txt
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
lib/redparse/decisiontree.rb
|
2
|
+
lib/redparse/version.rb
|
2
3
|
lib/redparse/reg_more_sugar.rb
|
3
4
|
lib/redparse/babyparser.rb
|
4
5
|
lib/redparse/node.rb
|
@@ -33,8 +34,10 @@ test/data/case.rb
|
|
33
34
|
test/test_redparse.rb
|
34
35
|
Manifest.txt
|
35
36
|
README.txt
|
37
|
+
History.txt
|
36
38
|
Rakefile
|
37
39
|
COPYING.LGPL
|
38
40
|
nurli/test_control.nurli
|
39
41
|
redparse.vpj
|
40
42
|
redparse.vpw
|
43
|
+
bin/redparse
|
data/README.txt
CHANGED
@@ -26,7 +26,7 @@ the wild. For known problems, see below.
|
|
26
26
|
* All are available as gems. (Or tarballs on rubyforge, if you must.)
|
27
27
|
|
28
28
|
== INSTALL:
|
29
|
-
* gem install redparse #(if root as
|
29
|
+
* gem install redparse #(if root as necessary)
|
30
30
|
|
31
31
|
== LICENSE:
|
32
32
|
|
@@ -254,9 +254,7 @@ be pretty close.
|
|
254
254
|
* The following expressions are known to parse incorrectly currently:
|
255
255
|
* m.cn= 1, V
|
256
256
|
* "#{}"""
|
257
|
-
* $11111111111111111111111111111111111111111111111111111111111111111111
|
258
257
|
* begin;mode;rescue;o_chmod rescue nil;end
|
259
|
-
* case F;when G; else;case; when j; end;end
|
260
258
|
* def i;"..#{@@c = 1}";end
|
261
259
|
* e { |c|; print "%02X" % c }
|
262
260
|
* File.open() {|f| ; }
|
@@ -266,13 +264,20 @@ be pretty close.
|
|
266
264
|
* module A; b; rescue C=>d; e; else g; ensure f; end
|
267
265
|
* class A; b; rescue C=>d; e; else g; ensure f; end
|
268
266
|
* class<<A; b; rescue C=>d; e; else g; ensure f; end
|
267
|
+
* %w![ ] { } ( ) | - * . \\ ? + ^ $ #!
|
269
268
|
|
270
269
|
== Homie doan' play dat
|
271
|
-
* These expressions
|
272
|
-
bug(s) in MRI.
|
270
|
+
* These expressions fail to parse like in MRI, because of bug(s) in MRI.
|
273
271
|
* p = p m %(1)
|
274
272
|
* p=556;p (e) /a
|
275
273
|
|
274
|
+
==
|
275
|
+
* And these expressions fail because of bugs in parse_tree.
|
276
|
+
* $11111111111111111111111111111111111111111111111111111111111111111111
|
277
|
+
* case F;when G; else;case; when j; end;end
|
278
|
+
* 1..2 #ruby 1.8.6 only
|
279
|
+
* Proc{|&b|} #ruby 1.8.7 only
|
280
|
+
|
276
281
|
==Known failing files
|
277
282
|
* And here's a list of files which are known to parse incorrectly:
|
278
283
|
* alib-0.5.1/lib/alib-0.5.1/util.rb
|
data/Rakefile
CHANGED
@@ -14,13 +14,14 @@ require 'lib/redparse/version.rb'
|
|
14
14
|
_.author = "Caleb Clausen"
|
15
15
|
_.email = "redparse-owner @at@ inforadical .dot. net"
|
16
16
|
_.url = ["http://redparse.rubyforge.org/", "http://rubyforge.org/projects/redparse/"]
|
17
|
-
_.extra_deps << ['rubylexer', '>= 0.7.
|
17
|
+
_.extra_deps << ['rubylexer', '>= 0.7.3']
|
18
|
+
_.extra_deps << ['reg', '>= 0.4.7']
|
18
19
|
# _.test_globs=["test/*"]
|
19
20
|
_.description=desc
|
20
21
|
_.summary=desc[/\A[^.]+\./]
|
21
|
-
_.spec_extras={:bindir=>''}
|
22
|
-
_.rdoc_pattern=/\A(README\.txt|lib\/.*\.rb)\Z/
|
23
|
-
_.remote_rdoc_dir="/"
|
22
|
+
# _.spec_extras={:bindir=>''}
|
23
|
+
# _.rdoc_pattern=/\A(README\.txt|lib\/.*\.rb)\Z/
|
24
|
+
# _.remote_rdoc_dir="/"
|
24
25
|
end
|
25
26
|
|
26
27
|
|
data/bin/redparse
ADDED
@@ -0,0 +1,260 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
=begin
|
3
|
+
redparse - a ruby parser written in ruby
|
4
|
+
Copyright (C) 2008 Caleb Clausen
|
5
|
+
|
6
|
+
This library is free software; you can redistribute it and/or
|
7
|
+
modify it under the terms of the GNU Lesser General Public
|
8
|
+
License as published by the Free Software Foundation; either
|
9
|
+
version 2.1 of the License, or (at your option) any later version.
|
10
|
+
|
11
|
+
This library is distributed in the hope that it will be useful,
|
12
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
14
|
+
Lesser General Public License for more details.
|
15
|
+
|
16
|
+
You should have received a copy of the GNU Lesser General Public
|
17
|
+
License along with this library; if not, write to the Free Software
|
18
|
+
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
19
|
+
=end
|
20
|
+
$VERBOSE=1 #turn on -w
|
21
|
+
require "redparse.rb"
|
22
|
+
require 'redparse/problemfiles'
|
23
|
+
|
24
|
+
class NeverExecThis<RuntimeError; end
|
25
|
+
|
26
|
+
def arraydiff(a,b)
|
27
|
+
a==b and return [a,false]
|
28
|
+
(Array===a or a=[a])
|
29
|
+
result= a.dup
|
30
|
+
diff=false
|
31
|
+
size= a.size >= b.size ? a.size : b.size
|
32
|
+
size.times{|i|
|
33
|
+
ai=a[i]
|
34
|
+
bi=b[i]
|
35
|
+
if Array===ai and Array===bi
|
36
|
+
result_i,diff_i= arraydiff(ai,bi)
|
37
|
+
diff||=diff_i
|
38
|
+
result[i]=result_i
|
39
|
+
elsif ai!=bi
|
40
|
+
next if Regexp===ai and ai.to_s==bi.to_s and
|
41
|
+
ai.options==bi.options
|
42
|
+
diff=true
|
43
|
+
result[i]={ai=>bi}
|
44
|
+
elsif ai.nil?
|
45
|
+
result[i]={'size mismatch'=>"#{a.size} for #{b.size}"} if a.size!=b.size
|
46
|
+
diff=true
|
47
|
+
end
|
48
|
+
if i.nonzero? and Hash===result[i] and Hash===result[i-1]
|
49
|
+
old=result[i-1]
|
50
|
+
oldkeys=old.keys
|
51
|
+
oldvals=old.values
|
52
|
+
if Reg::Subseq===oldkeys.first
|
53
|
+
oldkeys=oldkeys.children
|
54
|
+
oldval=oldvals.children
|
55
|
+
end
|
56
|
+
result[i-1..i]=[ {-[*oldkeys+result[i].keys]=>-[*oldvals+result[i].values]} ]
|
57
|
+
end
|
58
|
+
}
|
59
|
+
return result,diff
|
60
|
+
end
|
61
|
+
|
62
|
+
class RawParseTree; end
|
63
|
+
class ParseTree<RawParseTree
|
64
|
+
#this way is bad enough, there's a fd leak
|
65
|
+
def parse_tree_and_warnings_leaks_stderr(str,name)
|
66
|
+
oldSTDERR=STDERR.dup
|
67
|
+
warnstash=Tempfile.new "warnstash"
|
68
|
+
warnings=[]
|
69
|
+
|
70
|
+
STDERR.reopen warnstash
|
71
|
+
tree=parse_tree_for_string(str,name)
|
72
|
+
|
73
|
+
return tree,warnings
|
74
|
+
ensure
|
75
|
+
STDERR.reopen oldSTDERR
|
76
|
+
|
77
|
+
warnstash.rewind
|
78
|
+
warnings.replace warnstash.read.split
|
79
|
+
warnstash.close
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
|
84
|
+
|
85
|
+
output=:pp
|
86
|
+
quiet=true
|
87
|
+
ruby187=false
|
88
|
+
while /^-/===ARGV.first
|
89
|
+
case opt=ARGV.shift
|
90
|
+
when "--"; break
|
91
|
+
when "--pp"; output=:pp
|
92
|
+
when "--lisp"; output=:lisp
|
93
|
+
when "--parsetree"; output=:parsetree
|
94
|
+
when "--vsparsetree"; output=:vsparsetree
|
95
|
+
when "--vsparsetree2"; output=:vsparsetree2
|
96
|
+
when "--update-problemfiles"; problemfiles=ProblemFiles.new
|
97
|
+
when "--unparse"; output=:unparse
|
98
|
+
when "--compile", "-c"; compile=true
|
99
|
+
when "--macros", "--macro", "-m":
|
100
|
+
require 'rubygems'
|
101
|
+
require 'macro'
|
102
|
+
parserclass=Macro::RedParseWithMacros
|
103
|
+
when "-q"; quiet=true
|
104
|
+
when "-v"; quiet=false
|
105
|
+
when "-e"; inputs=[ARGV.join(" ")]; names=["-e"]; break
|
106
|
+
when "-7"; ruby187=true
|
107
|
+
else fail "unknown option: #{opt}"
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
unless inputs
|
112
|
+
if ARGV.empty?
|
113
|
+
inputs=[STDIN.read]
|
114
|
+
names=["-"]
|
115
|
+
elsif ARGV.size==1 and (Dir.entries(ARGV.first) rescue false)
|
116
|
+
names=Dir[ARGV.first+"/**/*.rb"]
|
117
|
+
else
|
118
|
+
names=ARGV.dup
|
119
|
+
end
|
120
|
+
inputs||=names.map{|name| File.open(name).read rescue nil}
|
121
|
+
end
|
122
|
+
|
123
|
+
result=0
|
124
|
+
|
125
|
+
safety="BEGIN{raise NeverExecThis};BEGIN{throw :never_exec_this,1};"
|
126
|
+
nullsafety=";"
|
127
|
+
#safe_inputs=inputs.map{|input| safety+input}
|
128
|
+
|
129
|
+
inputs.each_index{|i|
|
130
|
+
begin
|
131
|
+
|
132
|
+
input=inputs[i] or next
|
133
|
+
name=names[i]
|
134
|
+
|
135
|
+
if /\A=begin\s/===input
|
136
|
+
#combine 1st 2 lines of input
|
137
|
+
if /\A(=begin(.*)\n=end\s(.*))\n/===input
|
138
|
+
input[0,$1.size]="##$2 #$3"
|
139
|
+
else
|
140
|
+
/\A((.*)\n(.*))\n/===input
|
141
|
+
input[0,$1.size]=$2+" "+$3
|
142
|
+
end
|
143
|
+
input=safety+"\n"+input
|
144
|
+
else
|
145
|
+
input=safety+input
|
146
|
+
end
|
147
|
+
#print name+"... "; STDOUT.flush
|
148
|
+
|
149
|
+
begin
|
150
|
+
tree=nil
|
151
|
+
if catch(:never_exec_this){
|
152
|
+
tree=if compile
|
153
|
+
huh (parserclass||RedParse).new(input,name).compile
|
154
|
+
huh parse
|
155
|
+
else
|
156
|
+
(parserclass||RedParse).new(input,name).parse
|
157
|
+
end
|
158
|
+
nil
|
159
|
+
} #raise NeverExecThis
|
160
|
+
# rescue RedParse::ParseError=>e
|
161
|
+
# require 'pp'
|
162
|
+
# pp e.stack[-[15,e.stack.size].min..-1]
|
163
|
+
# raise
|
164
|
+
# rescue NeverExecThis:
|
165
|
+
puts "RedParse attempted to execute parse data in #{name}"
|
166
|
+
next
|
167
|
+
end
|
168
|
+
rescue Interrupt: exit 2
|
169
|
+
rescue Exception=>e
|
170
|
+
puts "during parse of #{name}:"
|
171
|
+
problemfiles.push name if problemfiles
|
172
|
+
raise e
|
173
|
+
end
|
174
|
+
tree or fail "parsetree was nil for #{name}"
|
175
|
+
|
176
|
+
fail unless RedParse::SequenceNode===tree
|
177
|
+
fail unless RedParse::KWCallNode===tree[0] and "BEGIN"==tree[0].name
|
178
|
+
fail unless RedParse::KWCallNode===tree[1] and "BEGIN"==tree[1].name
|
179
|
+
tree[0..1]=[]
|
180
|
+
|
181
|
+
case output
|
182
|
+
when :pp
|
183
|
+
require 'pp'
|
184
|
+
pp tree
|
185
|
+
when :lisp
|
186
|
+
puts tree.to_lisp
|
187
|
+
when :unparse
|
188
|
+
puts tree.unparse({})
|
189
|
+
when :parsetree
|
190
|
+
tree=tree.to_parsetree
|
191
|
+
hack=tree.dup
|
192
|
+
p hack
|
193
|
+
hack.first[1..2]=[] #get rid of BEGIN blocks inserted into beginning of input
|
194
|
+
hack=if hack.first.size<=2; hack.first[1] else hack end
|
195
|
+
pp(hack||[])
|
196
|
+
when :vsparsetree,:vsparsetree2
|
197
|
+
begin
|
198
|
+
require 'rubygems'
|
199
|
+
rescue Exception
|
200
|
+
end
|
201
|
+
require 'parse_tree'
|
202
|
+
#require 'algorithm/diff'
|
203
|
+
begin
|
204
|
+
pt_args=[:quirks]
|
205
|
+
pt_args<<:ruby187 if ruby187 or ::VERSION["1.8.7"]
|
206
|
+
mine=tree.to_parsetree(*pt_args)
|
207
|
+
if IO===input
|
208
|
+
input.rewind
|
209
|
+
input=input.read
|
210
|
+
end
|
211
|
+
ryans=nil
|
212
|
+
catch(:never_exec_this){
|
213
|
+
ryans,warns=ParseTree.new.parse_tree_and_warnings_leaks_stderr(input,name); nil
|
214
|
+
} and raise NeverExecThis
|
215
|
+
delta,is_diff=arraydiff(mine,ryans)
|
216
|
+
rescue NeverExecThis:
|
217
|
+
puts "ParseTree attempted to execute parse data in #{name}"
|
218
|
+
next
|
219
|
+
rescue Interrupt: exit 2
|
220
|
+
rescue Exception=>e
|
221
|
+
#raise( RuntimeError.new( "#{e} during to_parsetree of #{name}" ) )
|
222
|
+
puts "error during to_parsetree of #{name}"
|
223
|
+
problemfiles.push name if problemfiles
|
224
|
+
raise
|
225
|
+
end
|
226
|
+
if output==:vsparsetree2
|
227
|
+
if !quiet or is_diff
|
228
|
+
puts "mine:"
|
229
|
+
pp mine
|
230
|
+
puts "ryans:" if is_diff
|
231
|
+
pp ryans if is_diff
|
232
|
+
end
|
233
|
+
elsif !quiet or is_diff
|
234
|
+
puts 'differences in '+name if is_diff
|
235
|
+
pp delta
|
236
|
+
end
|
237
|
+
if is_diff
|
238
|
+
result=1
|
239
|
+
problemfiles.push name if problemfiles
|
240
|
+
else
|
241
|
+
puts "no differences in "+name
|
242
|
+
problemfiles.delete name if problemfiles
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
rescue NeverExecThis:
|
247
|
+
puts "mysterious attempt to execute parse data in #{name}"
|
248
|
+
next
|
249
|
+
rescue Interrupt,SystemExit: exit 2
|
250
|
+
rescue Exception=>e
|
251
|
+
puts "#{e}:#{e.class}"
|
252
|
+
puts e.backtrace.join("\n")
|
253
|
+
#problemfiles.push name if problemfiles
|
254
|
+
#raise
|
255
|
+
ensure
|
256
|
+
STDOUT.flush
|
257
|
+
end
|
258
|
+
}
|
259
|
+
exit result
|
260
|
+
|
data/lib/redparse.rb
CHANGED
@@ -345,8 +345,8 @@ class RedParse
|
|
345
345
|
#-[Value, DotOp|DoubleColonOp, MethNameToken,
|
346
346
|
# ASSIGNOP, Value, LowerOp]>>AccessorAssignNode,
|
347
347
|
|
348
|
-
-[MethNameToken.~.lb, '(', Value, ')']>>ParenedNode,
|
349
|
-
-[MethNameToken.~.lb, '(', ')']>>VarLikeNode, #alias for nil
|
348
|
+
-[(MethNameToken|FUNCLIKE_KEYWORD).~.lb, '(', Value, ')']>>ParenedNode,
|
349
|
+
-[(MethNameToken|FUNCLIKE_KEYWORD).~.lb, '(', ')']>>VarLikeNode, #alias for nil
|
350
350
|
|
351
351
|
# -[Value, KeywordOp, Value, LowerOp]>>KeywordOpNode,
|
352
352
|
-[Op('=',true).~.lb, Value, Op('rescue',true), Value, LowerOp]>>ParenedNode,
|
data/lib/redparse/node.rb
CHANGED
@@ -1197,6 +1197,16 @@ class RedParse
|
|
1197
1197
|
huh #what about rescues, else, ensure?
|
1198
1198
|
body.to_lisp
|
1199
1199
|
end
|
1200
|
+
|
1201
|
+
def self.want_extra_begin!(x=true)
|
1202
|
+
@@want_extra_begin=x
|
1203
|
+
end
|
1204
|
+
def want_extra_begin?
|
1205
|
+
return @@want_extra_begin if defined? @@want_extra_begin
|
1206
|
+
@@want_extra_begin =
|
1207
|
+
defined?(::ParseTree) and
|
1208
|
+
::ParseTree.new.parse_tree_for_string("begin; a; end")==[[:begin, [:vcall, :a]]]
|
1209
|
+
end
|
1200
1210
|
|
1201
1211
|
def parsetree
|
1202
1212
|
if size==1
|
@@ -1218,7 +1228,7 @@ class RedParse
|
|
1218
1228
|
else_=else_()
|
1219
1229
|
end
|
1220
1230
|
if body
|
1221
|
-
needbegin= (ParenedNode===body and body.after_equals)
|
1231
|
+
needbegin= (ParenedNode===body and want_extra_begin? and body.after_equals)
|
1222
1232
|
body=body.parsetree
|
1223
1233
|
body=[:begin, body] if needbegin and body.first!=:begin
|
1224
1234
|
(newtarget||target).push body if body
|
data/test/test_redparse.rb
CHANGED
@@ -24,9 +24,9 @@ require 'parse_tree'
|
|
24
24
|
require "redparse"
|
25
25
|
|
26
26
|
begin
|
27
|
-
require "test/
|
27
|
+
require "rubylexer/test/testcases"
|
28
28
|
rescue Exception
|
29
|
-
puts "!!!!!!
|
29
|
+
puts "!!!!!!rubylexer/test/testcases not found!!!!"
|
30
30
|
module TestCases;TESTCASES=[];end
|
31
31
|
end
|
32
32
|
|
@@ -3248,6 +3248,8 @@ EOS
|
|
3248
3248
|
@problem_exprs=$stdout
|
3249
3249
|
end
|
3250
3250
|
|
3251
|
+
@@differed_by_nil=0
|
3252
|
+
|
3251
3253
|
def check_parsing xmpl,pt=ParseTree.new
|
3252
3254
|
/unparse/===xmpl and warn 'unparse in parser test data!'
|
3253
3255
|
problem_exprs=problem_exprs()
|
@@ -3288,7 +3290,14 @@ EOS
|
|
3288
3290
|
begin
|
3289
3291
|
nodes=RedParse.new(xmpl,"-").parse
|
3290
3292
|
tree2=nodes.to_parsetree(:quirks)
|
3291
|
-
|
3293
|
+
if tree==tree2
|
3294
|
+
assert true
|
3295
|
+
else
|
3296
|
+
assert_equal recursive_compact!(tree), recursive_compact!(tree2)
|
3297
|
+
warn "parsetree differed by nil(s), expression #{xmpl}"
|
3298
|
+
@@differed_by_nil+=1
|
3299
|
+
END{ puts "#@@differed_by_nil expressions differed by nil(s)" }
|
3300
|
+
end
|
3292
3301
|
rescue Exception=>e
|
3293
3302
|
if problem_exprs
|
3294
3303
|
problem_exprs.write xmpl+"\n"
|
@@ -3316,4 +3325,14 @@ EOS
|
|
3316
3325
|
# rescue Exception=>e:
|
3317
3326
|
# raise "error: #{e}:#{e.class} while testing '#{xmpl}'"
|
3318
3327
|
end
|
3328
|
+
|
3329
|
+
def recursive_compact!(tree)
|
3330
|
+
return tree unless Array===tree
|
3331
|
+
recursive_compact_!(tree)
|
3332
|
+
end
|
3333
|
+
def recursive_compact_!(tree)
|
3334
|
+
tree.compact!
|
3335
|
+
tree.each{|subtree| recursive_compact_!(subtree) if Array===subtree}
|
3336
|
+
return tree
|
3337
|
+
end
|
3319
3338
|
end
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redparse
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Caleb Clausen
|
8
8
|
autorequire:
|
9
|
-
bindir:
|
9
|
+
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2009-04-30 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -20,7 +20,17 @@ dependencies:
|
|
20
20
|
requirements:
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 0.7.
|
23
|
+
version: 0.7.3
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: reg
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.4.7
|
24
34
|
version:
|
25
35
|
- !ruby/object:Gem::Dependency
|
26
36
|
name: hoe
|
@@ -30,19 +40,21 @@ dependencies:
|
|
30
40
|
requirements:
|
31
41
|
- - ">="
|
32
42
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1.
|
43
|
+
version: 1.12.2
|
34
44
|
version:
|
35
45
|
description: RedParse is a ruby parser written in pure ruby. Instead of YACC or ANTLR, it's parse tool is a home-brewed "compiler-interpreter". (The tool is LALR(1)-equivalent and the 'parse language' is pretty nice, even in it's current crude form.)
|
36
46
|
email: redparse-owner @at@ inforadical .dot. net
|
37
|
-
executables:
|
38
|
-
|
47
|
+
executables:
|
48
|
+
- redparse
|
39
49
|
extensions: []
|
40
50
|
|
41
51
|
extra_rdoc_files:
|
42
52
|
- Manifest.txt
|
43
53
|
- README.txt
|
54
|
+
- History.txt
|
44
55
|
files:
|
45
56
|
- lib/redparse/decisiontree.rb
|
57
|
+
- lib/redparse/version.rb
|
46
58
|
- lib/redparse/reg_more_sugar.rb
|
47
59
|
- lib/redparse/babyparser.rb
|
48
60
|
- lib/redparse/node.rb
|
@@ -77,11 +89,13 @@ files:
|
|
77
89
|
- test/test_redparse.rb
|
78
90
|
- Manifest.txt
|
79
91
|
- README.txt
|
92
|
+
- History.txt
|
80
93
|
- Rakefile
|
81
94
|
- COPYING.LGPL
|
82
95
|
- nurli/test_control.nurli
|
83
96
|
- redparse.vpj
|
84
97
|
- redparse.vpw
|
98
|
+
- bin/redparse
|
85
99
|
has_rdoc: true
|
86
100
|
homepage: http://redparse.rubyforge.org/
|
87
101
|
post_install_message:
|
@@ -105,7 +119,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
105
119
|
requirements: []
|
106
120
|
|
107
121
|
rubyforge_project: redparse
|
108
|
-
rubygems_version: 1.3.
|
122
|
+
rubygems_version: 1.3.1
|
109
123
|
signing_key:
|
110
124
|
specification_version: 2
|
111
125
|
summary: RedParse is a ruby parser written in pure ruby.
|