blob: fd50db7bb317d6ba235d1575844316b66197d5fb [file] [log] [blame]
def get_numbers_until_end_block(table)
while gets
break if /\};/ =~ $_
next if /^\/\// =~ $_
split(/,/).each do |number|
n = number.strip
table.push(n.to_i) unless n == ""
end
end
table
end
while gets
break if /protected static final short\[\] yyTable = \{/ =~ $_
print $_
end
# A little hacky...gets before ARGV to shift off and open file
yytable_prefix = ARGV.shift || ''
table4 = get_numbers_until_end_block([])
puts " protected static final short[] yyTable = #{yytable_prefix}YyTables.yyTable();"
while gets
break if /protected static final short\[\] yyCheck = \{/ =~ $_
print $_
end
check4 = get_numbers_until_end_block([])
puts " protected static final short[] yyCheck = #{yytable_prefix}YyTables.yyCheck();"
while gets
print $_
end
table2 = table4.slice!(0, table4.size / 2)
table3 = table4.slice!(0, table4.size / 2)
table1 = table2.slice!(0, table2.size / 2)
check2 = check4.slice!(0, check4.size / 2)
check3 = check4.slice!(0, check4.size / 2)
check1 = check2.slice!(0, check2.size / 2)
def printShortArray(table, f)
table.each_with_index { |e, i|
f.print "\n " if (i % 10 == 0)
begin
f.printf "%4d, ", e
rescue ArgumentError => a
$stderr.puts "Trouble printing '#{e}' on index #{i}"
end
}
end
def printShortMethod(f, table, name)
f.puts " private static final short[] yy#{name}() {"
f.puts " return new short[] {"
printShortArray table, f
f.puts
f.puts " };"
f.puts " }"
f.puts
end
open("#{yytable_prefix}YyTables.java", "w") { |f|
f.print <<END
package org.jruby.parser;
public class #{yytable_prefix}YyTables {
private static short[] combine(short[] t1, short[] t2,
short[] t3, short[] t4) {
short[] t = new short[t1.length + t2.length + t3.length + t4.length];
int index = 0;
System.arraycopy(t1, 0, t, index, t1.length);
index += t1.length;
System.arraycopy(t2, 0, t, index, t2.length);
index += t2.length;
System.arraycopy(t3, 0, t, index, t3.length);
index += t3.length;
System.arraycopy(t4, 0, t, index, t4.length);
return t;
}
public static final short[] yyTable() {
return combine(yyTable1(), yyTable2(), yyTable3(), yyTable4());
}
public static final short[] yyCheck() {
return combine(yyCheck1(), yyCheck2(), yyCheck3(), yyCheck4());
}
END
printShortMethod(f, table1, "Table1")
printShortMethod(f, table2, "Table2")
printShortMethod(f, table3, "Table3")
printShortMethod(f, table4, "Table4")
printShortMethod(f, check1, "Check1")
printShortMethod(f, check2, "Check2")
printShortMethod(f, check3, "Check3")
printShortMethod(f, check4, "Check4")
f.puts "}"
}