Search in sources :

Example 6 with IRuntimeStatus

use of priv.bajdcc.LALR1.grammar.runtime.IRuntimeStatus in project jMiniLang by bajdcc.

the class ModuleList method buildArrayMethod.

/**
 * 数组操作
 * @param info 信息
 */
private void buildArrayMethod(IRuntimeDebugInfo info) {
    info.addExternalFunc("g_array_add", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "数组添加元素";
        }

        @Override
        public RuntimeObjectType[] getArgsType() {
            return new RuntimeObjectType[] { RuntimeObjectType.kArray, RuntimeObjectType.kObject };
        }

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            RuntimeArray array = (RuntimeArray) args.get(0).getObj();
            args.get(1).setReadonly(false);
            array.add(args.get(1));
            return args.get(0);
        }
    });
    info.addExternalFunc("g_array_contains", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "数组查找元素";
        }

        @Override
        public RuntimeObjectType[] getArgsType() {
            return new RuntimeObjectType[] { RuntimeObjectType.kArray, RuntimeObjectType.kObject };
        }

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            RuntimeArray array = (RuntimeArray) args.get(0).getObj();
            args.get(1).setReadonly(false);
            return new RuntimeObject(array.contains(args.get(1)));
        }
    });
    info.addExternalFunc("g_array_append", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "数组添加数组";
        }

        @Override
        public RuntimeObjectType[] getArgsType() {
            return new RuntimeObjectType[] { RuntimeObjectType.kArray, RuntimeObjectType.kArray };
        }

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            RuntimeArray array = (RuntimeArray) args.get(0).getObj();
            RuntimeArray array2 = (RuntimeArray) args.get(1).getObj();
            array.add(array2);
            args.get(1).setReadonly(false);
            return args.get(0);
        }
    });
    info.addExternalFunc("g_array_insert", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "数组添加元素";
        }

        @Override
        public RuntimeObjectType[] getArgsType() {
            return new RuntimeObjectType[] { RuntimeObjectType.kArray, RuntimeObjectType.kInt, RuntimeObjectType.kObject };
        }

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            RuntimeArray array = (RuntimeArray) args.get(0).getObj();
            BigInteger n = (BigInteger) args.get(1).getObj();
            args.get(2).setReadonly(false);
            array.insert(n.intValue(), args.get(2));
            return args.get(0);
        }
    });
    info.addExternalFunc("g_array_set", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "数组设置元素";
        }

        @Override
        public RuntimeObjectType[] getArgsType() {
            return new RuntimeObjectType[] { RuntimeObjectType.kArray, RuntimeObjectType.kInt, RuntimeObjectType.kObject };
        }

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            RuntimeArray array = (RuntimeArray) args.get(0).getObj();
            BigInteger index = (BigInteger) args.get(1).getObj();
            args.get(2).setReadonly(false);
            if (!array.set(index.intValue(), args.get(2))) {
                status.err(RuntimeException.RuntimeError.INVALID_INDEX, "array.set");
            }
            return null;
        }
    });
    info.addExternalFunc("g_array_pop", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "数组弹出元素";
        }

        @Override
        public RuntimeObjectType[] getArgsType() {
            return new RuntimeObjectType[] { RuntimeObjectType.kArray };
        }

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            RuntimeArray array = (RuntimeArray) args.get(0).getObj();
            return new RuntimeObject(array.pop());
        }
    });
    info.addExternalFunc("g_array_clear", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "数组清除元素";
        }

        @Override
        public RuntimeObjectType[] getArgsType() {
            return new RuntimeObjectType[] { RuntimeObjectType.kArray };
        }

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            RuntimeArray array = (RuntimeArray) args.get(0).getObj();
            array.clear();
            return new RuntimeObject(array);
        }
    });
    info.addExternalFunc("g_array_reverse", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "数组反转";
        }

        @Override
        public RuntimeObjectType[] getArgsType() {
            return new RuntimeObjectType[] { RuntimeObjectType.kArray };
        }

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            RuntimeArray array = (RuntimeArray) args.get(0).getObj();
            array.reverse();
            return new RuntimeObject(array);
        }
    });
    info.addExternalFunc("g_array_get", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "数组查询";
        }

        @Override
        public RuntimeObjectType[] getArgsType() {
            return new RuntimeObjectType[] { RuntimeObjectType.kArray, RuntimeObjectType.kInt };
        }

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            RuntimeArray array = (RuntimeArray) args.get(0).getObj();
            BigInteger index = (BigInteger) args.get(1).getObj();
            return new RuntimeObject(array.get(index.intValue()));
        }
    });
    info.addExternalFunc("g_array_get_ex", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "数组查询";
        }

        @Override
        public RuntimeObjectType[] getArgsType() {
            return new RuntimeObjectType[] { RuntimeObjectType.kArray, RuntimeObjectType.kInt };
        }

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            RuntimeArray array = (RuntimeArray) args.get(0).getObj();
            BigInteger index = (BigInteger) args.get(1).getObj();
            return new RuntimeObject(array.get(index.intValue(), status));
        }
    });
    info.addExternalFunc("g_array_size", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "数组长度";
        }

        @Override
        public RuntimeObjectType[] getArgsType() {
            return new RuntimeObjectType[] { RuntimeObjectType.kArray };
        }

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            RuntimeArray array = (RuntimeArray) args.get(0).getObj();
            return array.size();
        }
    });
    info.addExternalFunc("g_array_remove", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "数组移除";
        }

        @Override
        public RuntimeObjectType[] getArgsType() {
            return new RuntimeObjectType[] { RuntimeObjectType.kArray, RuntimeObjectType.kInt };
        }

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            RuntimeArray array = (RuntimeArray) args.get(0).getObj();
            BigInteger index = (BigInteger) args.get(1).getObj();
            return new RuntimeObject(array.remove(index.intValue()));
        }
    });
    info.addExternalFunc("g_array_delete", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "数组移除";
        }

        @Override
        public RuntimeObjectType[] getArgsType() {
            return new RuntimeObjectType[] { RuntimeObjectType.kArray, RuntimeObjectType.kObject };
        }

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            RuntimeArray array = (RuntimeArray) args.get(0).getObj();
            RuntimeObject obj = args.get(1);
            return new RuntimeObject(array.delete(obj));
        }
    });
    info.addExternalFunc("g_array_empty", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "数组为空";
        }

        @Override
        public RuntimeObjectType[] getArgsType() {
            return new RuntimeObjectType[] { RuntimeObjectType.kArray };
        }

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            RuntimeArray array = (RuntimeArray) args.get(0).getObj();
            return new RuntimeObject(array.isEmpty());
        }
    });
    info.addExternalFunc("g_array_range", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "产生连续整数数组";
        }

        @Override
        public RuntimeObjectType[] getArgsType() {
            return new RuntimeObjectType[] { RuntimeObjectType.kInt, RuntimeObjectType.kInt };
        }

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            RuntimeArray array = new RuntimeArray();
            int a = ((BigInteger) args.get(0).getObj()).intValue();
            int b = ((BigInteger) args.get(1).getObj()).intValue();
            for (int i = a; i <= b; i++) {
                array.add(new RuntimeObject(BigInteger.valueOf(i)));
            }
            return new RuntimeObject(array);
        }
    });
    info.addExternalFunc("g_array_fill", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "填充数组";
        }

        @Override
        public RuntimeObjectType[] getArgsType() {
            return new RuntimeObjectType[] { RuntimeObjectType.kArray, RuntimeObjectType.kObject };
        }

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            RuntimeArray array = (RuntimeArray) args.get(0).getObj();
            RuntimeObject obj = args.get(1);
            for (int i = 0; i <= array.length(); i++) {
                array.set(i, obj);
            }
            return new RuntimeObject(array);
        }
    });
}
Also used : RuntimeArray(priv.bajdcc.LALR1.grammar.runtime.data.RuntimeArray) BigInteger(java.math.BigInteger) RuntimeException(priv.bajdcc.LALR1.grammar.runtime.RuntimeException)

Aggregations

BigInteger (java.math.BigInteger)4 RuntimeException (priv.bajdcc.LALR1.grammar.runtime.RuntimeException)4 RuntimeArray (priv.bajdcc.LALR1.grammar.runtime.data.RuntimeArray)4 BufferedReader (java.io.BufferedReader)2 List (java.util.List)2 Matcher (java.util.regex.Matcher)2 Grammar (priv.bajdcc.LALR1.grammar.Grammar)2 FileReader (java.io.FileReader)1 InputStreamReader (java.io.InputStreamReader)1 BigDecimal (java.math.BigDecimal)1 URL (java.net.URL)1 URLConnection (java.net.URLConnection)1 ArrayList (java.util.ArrayList)1 Pattern (java.util.regex.Pattern)1 Document (org.dom4j.Document)1 Node (org.dom4j.Node)1 SAXReader (org.dom4j.io.SAXReader)1 IRuntimeDebugExec (priv.bajdcc.LALR1.grammar.runtime.IRuntimeDebugExec)1 IRuntimeStatus (priv.bajdcc.LALR1.grammar.runtime.IRuntimeStatus)1 RuntimeCodePage (priv.bajdcc.LALR1.grammar.runtime.RuntimeCodePage)1