/home/brock/classes/255/f09/NetBeans/RL java/src/rljava/Main.java

package rljava;


enum OperatorType { optorSer,                /* Series (+) operator */
                    optorPar                 /* Parallel (|) operator */
}

class RLAssignment {
    String Target ;
    OperatorType operator ;             /* Don't need enum here */
    String VarName1 ;                   /* Separate object for each */
    double ConstValue1 ;
    String VarName2 ;                   /* Avoid op1Type, by storing */
    double ConstValue2 ;                /* NULL in String */
};

/* Node for linked list of RL assignments. */
class RLAssignmentNode {
    RLAssignment value ;
    RLAssignmentNode next ;
};

/* Alternative difination of RLAssignment */
class RLAssignmentOneObject {
    String Target ;
    OperatorType operator ;
    Object arg1 ;                       /* One object */
    Object arg2 ;
};

public class Main {

    public static void main(String[] args) {
        RLAssignment AssignAeq10serB = new RLAssignment();
        RLAssignment AssignBeq10parC = new RLAssignment();
        AssignAeq10serB.Target = "A" ;
        AssignAeq10serB.operator = OperatorType.optorSer ;
        AssignAeq10serB.ConstValue1 = 10.0 ;
        AssignAeq10serB.VarName1 = null ;
        AssignAeq10serB.ConstValue2 = -1.0 ;
        AssignAeq10serB.VarName2 = "B" ;

        AssignBeq10parC.Target = "B" ;
        AssignBeq10parC.operator = OperatorType.optorPar ;
        AssignBeq10parC.ConstValue1 = 10.0 ;
        AssignBeq10parC.VarName1 = null ;
        AssignBeq10parC.ConstValue2 = -1.0 ;
        AssignBeq10parC.VarName2 = "C" ;

        RLAssignmentNode Line1 = new RLAssignmentNode() ;
        RLAssignmentNode Line2 = new RLAssignmentNode() ;
        Line1.value = AssignAeq10serB ;
        Line1.next  = Line2 ;
        Line2.value = AssignBeq10parC ;
        Line2.next  = Line2 ;

        RLAssignmentOneObject AssignAeq10serB1
                = new RLAssignmentOneObject();
        RLAssignmentOneObject AssignBeq10parC1
                = new RLAssignmentOneObject();
        AssignAeq10serB1.Target = "A" ;
        AssignAeq10serB1.operator = OperatorType.optorSer ;
        AssignAeq10serB1.arg1 = 10.0 ;
        AssignAeq10serB1.arg2 = "B" ;

        AssignBeq10parC1.Target = "B" ;
        AssignBeq10parC1.operator = OperatorType.optorPar ;
        AssignBeq10parC1.arg1 = 10.0 ;
        AssignBeq10parC1.arg2 = "C" ;

        double arg1D ;
        String arg1S ;

        if (AssignAeq10serB.VarName1 == null)
           arg1S = AssignAeq10serB.VarName1 ;
        else
           arg1D = AssignAeq10serB.ConstValue1 ;

        if (AssignAeq10serB1.arg1 instanceof String)
            arg1S = (String) AssignAeq10serB1.arg1 ;
        else
            arg1D = (Double) AssignAeq10serB1.arg1 ;

        /* worth noting
         *
         * AssignAeq10serB.VarName1.charAt(0)
         *   is legal though it may raise NullPointerException
         * AssignAeq10serB1.arg1.charAt(0)
         *   is not legal because Object does not have a charAt method
         * ((String)AssignAeq10serB1.arg1).charAt(0)
         *   is legal though it may raise ClassCastException
         */
    }
}