redparse 0.8.0 → 0.8.1
Sign up to get free protection for your applications and to get access to all the features.
- 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.
|