class InstructionLoadAttr extends Instruction {
    private final String attrName;

    public InstructionLoadAttr(String name) {
        this.attrName = name;
    }

    public String getAttrName() {
        return this.attrName;
    }

    @Override
    public void execute(RunEnvironment environment, List<String> errorList) throws Exception {<FILL_FUNCTION_BODY>}

    @Override
    public String toString() {
        return "LoadAttr:" + this.attrName;
    }
}

        Object o = environment.getContext().getSymbol(this.attrName);
        //是函数，则执行
        if (o instanceof InstructionSet) {
            InstructionCallMacro macro = new InstructionCallMacro(this.attrName);
            macro.execute(environment, errorList);
            //注意，此处不能在增加指令，因为在InstructionCallMacro已经调用 environment.programPointAddOne();
        } else {
            environment.push((OperateDataAttr)o);
            environment.programPointAddOne();
        }
    
<methods>public non-sealed void <init>() ,public abstract void execute(com.ql.util.express.RunEnvironment, List<java.lang.String>) throws java.lang.Exception,public java.lang.String getExceptionPrefix() ,public java.lang.Integer getLine() ,public com.ql.util.express.instruction.detail.Instruction setLine(java.lang.Integer) <variables>private java.lang.Integer line