Simple Example: Java
A straightforward, "apples-to-apples" Java migration of the simple MAPPER RUN uses labels in a switch
statement to emulate MAPPER's @GTO
statement (Java does not have go-to statement, and Java
labels aren't useful as a replacement for @GTO
):
Java (Apples-to-Apples)
/** MJ organizes variables migrated from MAPPER in a simple class. */ class Variables implements IMJVariableContainer { MJNamedInteger bottles; MJNamedString name; } MJVariableNamespace localNS = new MJVariableNamespace(VariableScope.LOCAL); Variables var = new Variables(); int __mjlabel__ = 0; __mjloop__: for (;;) { switch (__mjlabel__) { case 0: { // .bottles of beer (Peter Adlerton, 8/31/05, http://99-bottles-of-beer.net) // *=============================================================================== // @ldv <bottles>i2=99,<name>a7=bottles . var.bottles = new MJNamedInteger("bottles", VariableScope.LOCAL, 2, EnumSet.noneOf(LoadOption.class), "99"); localNS.addVariable(var.bottles); var.name = new MJNamedString("name", VariableScope.LOCAL, MaprptVariableType.ALPHANUMERIC, 7, EnumSet.of(LoadOption.TRUNCATE), "bottles"); localNS.addVariable(var.name); } case 10: { // @0010: . // <bottles>(p) <name>(p) of beer on the wall, <bottles>(p) <name>(p) of beer, out.format("%1$s %2$s of beer on the wall, %1$s %2$s of beer,<br>", new MJFormatter(var.bottles.toMapperNumber().intValue()).pack().toFormatted(), new MJFormatter(var.name.toString()).pack().toFormatted()); // @if <bottles> > 0 . ;gto 0020 ;. if (var.bottles.GT(0)) { // do nothing } else { __mjlabel__ = 20; continue __mjloop__; } // @dec <bottles> if <bottles> = 0,(0020) ;if <bottles> = 1 ldv <name>=bottle ;. var.bottles.increment(-1); if (var.bottles.EQ(0)) { __mjlabel__ = 20; continue __mjloop__; } else { if (var.bottles.EQ(1)) { var.name.setString("bottle"); } else { // do nothing } } // Take 1 down, pass it around, <bottles>(p) <name>(p) of beer on the wall. out.format("Take 1 down, pass it around, %s %s of beer on the wall.<br>", new MJFormatter(var.bottles.toMapperNumber().intValue()).pack().toFormatted(), new MJFormatter(var.name.toString()).pack().toFormatted()); // @gto 0010 . __mjlabel__ = 10; continue __mjloop__; } case 20: { // @0020: . // Take 1 down, pass it around, no more bottles of beer on the wall. out.println("Take 1 down, pass it around, no more bottles of beer on the wall.<br>"); break __mjloop__; } default: { } } // END __mjlabel__ SWITCH } // END __mjloop__ FOR