mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
52 lines
1,010 B
Ruby
52 lines
1,010 B
Ruby
|
#
|
||
|
# racc scanner tester
|
||
|
#
|
||
|
|
||
|
require 'racc/raccs'
|
||
|
|
||
|
|
||
|
class ScanError < StandardError; end
|
||
|
|
||
|
def testdata( dir, argv )
|
||
|
if argv.empty? then
|
||
|
Dir.glob( dir + '/*' ) -
|
||
|
Dir.glob( dir + '/*.swp' ) -
|
||
|
[ dir + '/CVS' ]
|
||
|
else
|
||
|
argv.collect {|i| dir + '/' + i }
|
||
|
end
|
||
|
end
|
||
|
|
||
|
|
||
|
if ARGV.delete '--print' then
|
||
|
$raccs_print_type = true
|
||
|
printonly = true
|
||
|
else
|
||
|
printonly = false
|
||
|
end
|
||
|
|
||
|
testdata( File.dirname($0) + '/scandata', ARGV ).each do |file|
|
||
|
$stderr.print File.basename(file) + ': '
|
||
|
begin
|
||
|
ok = File.read(file)
|
||
|
s = Racc::GrammarFileScanner.new( ok )
|
||
|
sym, (val, lineno) = s.scan
|
||
|
if printonly then
|
||
|
$stderr.puts
|
||
|
$stderr.puts val
|
||
|
next
|
||
|
end
|
||
|
|
||
|
val = '{' + val + "}\n"
|
||
|
sym == :ACTION or raise ScanError, 'is not action!'
|
||
|
val == ok or raise ScanError, "\n>>>\n#{ok}----\n#{val}<<<"
|
||
|
|
||
|
$stderr.puts 'ok'
|
||
|
rescue => err
|
||
|
$stderr.puts 'fail (' + err.type.to_s + ')'
|
||
|
$stderr.puts err.message
|
||
|
$stderr.puts err.backtrace
|
||
|
$stderr.puts
|
||
|
end
|
||
|
end
|