Search in sources :

Example 6 with RuntimeObject

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

the class ModuleNet method parseInternal.

private static RuntimeObject parseInternal(Object o) {
    if (o instanceof JSONObject) {
        JSONObject obj = (JSONObject) o;
        RuntimeMap map = new RuntimeMap();
        obj.forEach((key, value) -> {
            map.put(key, parseInternal(value));
        });
        return new RuntimeObject(map);
    } else if (o instanceof JSONArray) {
        JSONArray obj = (JSONArray) o;
        RuntimeArray arr = new RuntimeArray();
        obj.forEach((key) -> {
            arr.add(parseInternal(key));
        });
        return new RuntimeObject(arr);
    } else {
        return new RuntimeObject(o);
    }
}
Also used : Document(org.dom4j.Document) Iterator(java.util.Iterator) Node(org.dom4j.Node) URL(java.net.URL) LALR1.grammar.runtime(priv.bajdcc.LALR1.grammar.runtime) ModuleNetClient(priv.bajdcc.LALR1.interpret.module.net.ModuleNetClient) ResourceLoader(priv.bajdcc.util.ResourceLoader) SAXReader(org.dom4j.io.SAXReader) Grammar(priv.bajdcc.LALR1.grammar.Grammar) InputStreamReader(java.io.InputStreamReader) ModuleNetServer(priv.bajdcc.LALR1.interpret.module.net.ModuleNetServer) RuntimeArray(priv.bajdcc.LALR1.grammar.runtime.data.RuntimeArray) JSONArray(com.alibaba.fastjson.JSONArray) Logger(org.apache.log4j.Logger) RuntimeMap(priv.bajdcc.LALR1.grammar.runtime.data.RuntimeMap) List(java.util.List) JSON(com.alibaba.fastjson.JSON) Matcher(java.util.regex.Matcher) URLConnection(java.net.URLConnection) JSONObject(com.alibaba.fastjson.JSONObject) BigInteger(java.math.BigInteger) BufferedReader(java.io.BufferedReader) Pattern(java.util.regex.Pattern) RuntimeArray(priv.bajdcc.LALR1.grammar.runtime.data.RuntimeArray) JSONObject(com.alibaba.fastjson.JSONObject) JSONArray(com.alibaba.fastjson.JSONArray) RuntimeMap(priv.bajdcc.LALR1.grammar.runtime.data.RuntimeMap)

Example 7 with RuntimeObject

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

the class ModuleProc method buildMethod.

private void buildMethod(IRuntimeDebugInfo info) {
    info.addExternalFunc("g_create_process", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "创建进程";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            RuntimeFuncObject func = (RuntimeFuncObject) args.get(0).getObj();
            return new RuntimeObject(BigInteger.valueOf(status.createProcess(func)));
        }
    });
    info.addExternalFunc("g_create_process_args", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "创建进程带参数";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            RuntimeFuncObject func = (RuntimeFuncObject) args.get(0).getObj();
            RuntimeObject obj = args.get(1);
            return new RuntimeObject(BigInteger.valueOf(status.createProcess(func, obj)));
        }
    });
    info.addExternalFunc("g_create_user_process", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "创建用户态进程";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            RuntimeFuncObject func = (RuntimeFuncObject) args.get(0).getObj();
            return new RuntimeObject(BigInteger.valueOf(status.createUsrProcess(func)));
        }
    });
    info.addExternalFunc("g_create_user_process_args", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "创建用户态进程带参数";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            RuntimeFuncObject func = (RuntimeFuncObject) args.get(0).getObj();
            RuntimeObject obj = args.get(1);
            return new RuntimeObject(BigInteger.valueOf(status.createUsrProcess(func, obj)));
        }
    });
    info.addExternalFunc("g_get_user_procs", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "获取用户态进程ID列表";
        }

        @Override
        public RuntimeObjectType[] getArgsType() {
            return null;
        }

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            RuntimeArray arr = new RuntimeArray();
            List<Integer> list = status.getUsrProcs();
            for (Integer pid : list) {
                arr.add(new RuntimeObject(pid));
            }
            return new RuntimeObject(arr);
        }
    });
    info.addExternalFunc("g_get_pid", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "获取进程ID";
        }

        @Override
        public RuntimeObjectType[] getArgsType() {
            return null;
        }

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            return new RuntimeObject(BigInteger.valueOf(status.getPid()));
        }
    });
    info.addExternalFunc("g_get_parent_pid", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "获取父进程ID";
        }

        @Override
        public RuntimeObjectType[] getArgsType() {
            return null;
        }

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            return new RuntimeObject(BigInteger.valueOf(status.getParentPid()));
        }
    });
    info.addExternalFunc("g_get_process_priority", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "获取进程优先级";
        }

        @Override
        public RuntimeObjectType[] getArgsType() {
            return null;
        }

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            return new RuntimeObject(BigInteger.valueOf(status.getPriority()));
        }
    });
    info.addExternalFunc("g_set_process_priority", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "设置进程优先级";
        }

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

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

        @Override
        public String getDoc() {
            return "进程等待";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            BigInteger pid = (BigInteger) args.get(0).getObj();
            return new RuntimeObject(status.getService().getProcessService().join(pid.intValue(), status.getPid()));
        }
    });
    info.addExternalFunc("g_live_process", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "进程存活";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            BigInteger pid = (BigInteger) args.get(0).getObj();
            return new RuntimeObject(status.getService().getProcessService().live(pid.intValue()));
        }
    });
    info.addExternalFunc("g_sleep", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "进程睡眠";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            BigInteger turn = (BigInteger) args.get(0).getObj();
            int time = turn.intValue();
            return new RuntimeObject(BigInteger.valueOf(status.getService().getProcessService().sleep(status.getPid(), time > 0 ? time : 0)));
        }
    });
    info.addExternalFunc("g_query_usr_proc", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "枚举用户态进程";
        }

        @Override
        public RuntimeObjectType[] getArgsType() {
            return null;
        }

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            return new RuntimeObject(ProcInfoHelper.getProcInfo(status, status.getUsrProcs()));
        }
    });
    info.addExternalFunc("g_query_sys_proc", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "枚举内核态进程";
        }

        @Override
        public RuntimeObjectType[] getArgsType() {
            return null;
        }

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            return new RuntimeObject(ProcInfoHelper.getProcInfo(status, status.getSysProcs()));
        }
    });
    info.addExternalFunc("g_query_all_proc", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "枚举进程";
        }

        @Override
        public RuntimeObjectType[] getArgsType() {
            return null;
        }

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            return new RuntimeObject(ProcInfoHelper.getProcInfoAll(status));
        }
    });
    info.addExternalFunc("g_set_process_desc", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "设置进程说明";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            status.setProcDesc(String.valueOf(args.get(0).getObj()));
            return null;
        }
    });
}
Also used : BigInteger(java.math.BigInteger) RuntimeArray(priv.bajdcc.LALR1.grammar.runtime.data.RuntimeArray) BigInteger(java.math.BigInteger) RuntimeFuncObject(priv.bajdcc.LALR1.grammar.runtime.data.RuntimeFuncObject) List(java.util.List) ArrayList(java.util.ArrayList) RuntimeException(priv.bajdcc.LALR1.grammar.runtime.RuntimeException)

Example 8 with RuntimeObject

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

the class ModuleString method buildStringUtils.

private void buildStringUtils(IRuntimeDebugInfo info) {
    info.addExternalFunc("g_string_replace", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "字符串替换";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            String str = (String) args.get(0).getObj();
            String pat = (String) args.get(1).getObj();
            String sub = (String) args.get(2).getObj();
            RuntimeArray arr = new RuntimeArray();
            return new RuntimeObject(str.replaceAll(pat, sub));
        }
    });
    info.addExternalFunc("g_string_split", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "字符串分割";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            String str = (String) args.get(0).getObj();
            String split = (String) args.get(1).getObj();
            RuntimeArray arr = new RuntimeArray();
            for (String item : str.split(split, Integer.MAX_VALUE)) {
                arr.add(new RuntimeObject(item));
            }
            return new RuntimeObject(arr);
        }
    });
    info.addExternalFunc("g_string_splitn", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "字符串分割";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            String str = (String) args.get(0).getObj();
            String split = (String) args.get(1).getObj();
            int n = (int) args.get(1).getObj();
            RuntimeArray arr = new RuntimeArray();
            for (String item : str.split(split, n)) {
                arr.add(new RuntimeObject(item));
            }
            return new RuntimeObject(arr);
        }
    });
    info.addExternalFunc("g_string_trim", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "字符串去除头尾空白";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            String str = (String) args.get(0).getObj();
            return new RuntimeObject(str.trim());
        }
    });
    info.addExternalFunc("g_string_length", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "字符串长度";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            String str = (String) args.get(0).getObj();
            return new RuntimeObject(BigInteger.valueOf(str.length()));
        }
    });
    info.addExternalFunc("g_string_empty", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "字符串是否为空";
        }

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

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

        @Override
        public String getDoc() {
            return "字符串查询";
        }

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

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

        @Override
        public String getDoc() {
            return "字符串正则匹配";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            String str = (String) args.get(0).getObj();
            String regex = (String) args.get(1).getObj();
            Matcher m = Pattern.compile(regex).matcher(str);
            RuntimeArray arr = new RuntimeArray();
            while (m.find()) {
                arr.add(new RuntimeObject(m.group()));
            }
            return new RuntimeObject(arr);
        }
    });
    info.addExternalFunc("g_string_build", 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();
            StringBuilder sb = new StringBuilder();
            for (Object obj : array.toList()) {
                sb.append(obj);
            }
            return new RuntimeObject(sb.toString());
        }
    });
    info.addExternalFunc("g_string_atoi", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "字符串转换成数字";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            String str = (String) args.get(0).getObj();
            try {
                BigInteger bi = new BigInteger(str);
                return new RuntimeObject(new BigInteger(str));
            } catch (NumberFormatException e) {
                return new RuntimeObject(BigInteger.valueOf(-1));
            }
        }
    });
    info.addExternalFunc("g_string_atoi_s", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "字符串转换成数字(安全版本)";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            String str = (String) args.get(0).getObj();
            try {
                BigInteger bi = new BigInteger(str);
                return new RuntimeObject(new BigInteger(str));
            } catch (NumberFormatException e) {
                return null;
            }
        }
    });
    info.addExternalFunc("g_string_join_array", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "字符串数组连接";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            RuntimeArray arr = (RuntimeArray) args.get(0).getObj();
            String delim = (String) args.get(1).getObj();
            return new RuntimeObject(String.join(delim, arr.toStringList()));
        }
    });
    info.addExternalFunc("g_string_toupper", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "字符串大写";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            String delim = (String) args.get(0).getObj();
            return new RuntimeObject(delim.toUpperCase());
        }
    });
    info.addExternalFunc("g_string_tolower", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "字符串小写";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            String delim = (String) args.get(0).getObj();
            return new RuntimeObject(delim.toLowerCase());
        }
    });
    info.addExternalFunc("g_string_rep", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "字符串重复构造";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            String str = (String) args.get(0).getObj();
            BigInteger dup = (BigInteger) args.get(1).getObj();
            int n = dup.intValue();
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < n; i++) {
                sb.append(str);
            }
            return new RuntimeObject(sb.toString());
        }
    });
    info.addExternalFunc("g_string_to_number", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "字符串转换数字";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            String str = (String) args.get(0).getObj();
            try {
                return new RuntimeObject(new BigInteger(str));
            } catch (Exception e1) {
                try {
                    return new RuntimeObject(new BigDecimal(str));
                } catch (Exception e2) {
                    return null;
                }
            }
        }
    });
    info.addExternalFunc("g_string_equal", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "字符串相等比较";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            if (args.get(0).getType() == RuntimeObjectType.kString) {
                String str = (String) args.get(0).getObj();
                String cmp = (String) args.get(1).getObj();
                return new RuntimeObject(str.compareTo(cmp) == 0);
            }
            return new RuntimeObject(false);
        }
    });
    info.addExternalFunc("g_string_not_equal", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "字符串不等比较";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            if (args.get(0).getType() == RuntimeObjectType.kString) {
                String str = (String) args.get(0).getObj();
                String cmp = (String) args.get(1).getObj();
                return new RuntimeObject(str.compareTo(cmp) != 0);
            }
            return new RuntimeObject(true);
        }
    });
    info.addExternalFunc("g_string_start_with", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "字符串开头比较";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            String str = (String) args.get(0).getObj();
            String cmp = (String) args.get(1).getObj();
            return new RuntimeObject(str.startsWith(cmp));
        }
    });
    info.addExternalFunc("g_string_end_with", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "字符串结尾比较";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            String str = (String) args.get(0).getObj();
            String cmp = (String) args.get(1).getObj();
            return new RuntimeObject(str.endsWith(cmp));
        }
    });
    info.addExternalFunc("g_string_substr", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "字符串子串";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            String str = (String) args.get(0).getObj();
            BigInteger a = (BigInteger) args.get(1).getObj();
            BigInteger b = (BigInteger) args.get(2).getObj();
            return new RuntimeObject(str.substring(a.intValue(), b.intValue()));
        }
    });
    info.addExternalFunc("g_string_left", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "字符串左子串";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            String str = (String) args.get(0).getObj();
            BigInteger a = (BigInteger) args.get(1).getObj();
            return new RuntimeObject(str.substring(0, a.intValue()));
        }
    });
    info.addExternalFunc("g_string_right", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "字符串右子串";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            String str = (String) args.get(0).getObj();
            BigInteger a = (BigInteger) args.get(1).getObj();
            return new RuntimeObject(str.substring(a.intValue()));
        }
    });
}
Also used : RuntimeArray(priv.bajdcc.LALR1.grammar.runtime.data.RuntimeArray) Matcher(java.util.regex.Matcher) BigDecimal(java.math.BigDecimal) BigInteger(java.math.BigInteger)

Example 9 with RuntimeObject

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

the class ModuleBase method getCodePage.

@Override
public RuntimeCodePage getCodePage() throws Exception {
    if (runtimeCodePage != null)
        return runtimeCodePage;
    String base = ResourceLoader.load(getClass());
    Grammar grammar = new Grammar(base);
    RuntimeCodePage page = grammar.getCodePage();
    IRuntimeDebugInfo info = page.getInfo();
    info.addExternalValue("g_null", () -> new RuntimeObject(null));
    final BigInteger MINUS_ONE = new BigInteger("-1");
    info.addExternalValue("g_minus_1", () -> new RuntimeObject(MINUS_ONE));
    info.addExternalValue("g_true", () -> new RuntimeObject(true));
    info.addExternalValue("g_false", () -> new RuntimeObject(false));
    final String NEWLINE = System.lineSeparator();
    info.addExternalValue("g_endl", () -> new RuntimeObject(NEWLINE));
    info.addExternalValue("g_nullptr", () -> new RuntimeObject(-1));
    info.addExternalFunc("g_is_null", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "判断是否为空";
        }

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

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

        @Override
        public String getDoc() {
            return "判断句柄合法";
        }

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

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

        @Override
        public String getDoc() {
            return "设置对象属性";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            BigInteger flag = (BigInteger) args.get(1).getObj();
            args.get(0).setFlag(flag.longValue());
            return args.get(0);
        }
    });
    info.addExternalFunc("g_get_flag", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "获取对象属性";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            return new RuntimeObject(BigInteger.valueOf(args.get(0).getFlag()));
        }
    });
    info.addExternalFunc("g_is_flag", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "判断对象属性";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            BigInteger flag = (BigInteger) args.get(1).getObj();
            return new RuntimeObject(args.get(0).getFlag() == flag.longValue());
        }
    });
    info.addExternalFunc("g_set_debug", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "输出调试信息";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            boolean debug = (boolean) args.get(0).getObj();
            status.getService().getProcessService().setDebug(status.getPid(), debug);
            return null;
        }
    });
    info.addExternalFunc("g_not_null", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "判断是否有效";
        }

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

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

        @Override
        public String getDoc() {
            return "标准输出";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            logger.info(args.get(0).getObj());
            return null;
        }
    });
    info.addExternalFunc("g_print_info", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "标准输出";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            logger.info(args.get(0));
            return null;
        }
    });
    info.addExternalFunc("g_printn", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "标准输出并换行";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            Object[] info = status.getProcInfo();
            logger.info(String.format("#%03d [%s] %s", status.getPid(), info[2], args.get(0).getObj()));
            return null;
        }
    });
    info.addExternalFunc("g_printdn", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "调试输出并换行";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            Object[] info = status.getProcInfo();
            logger.debug(String.format("#%03d [%s] %s", status.getPid(), info[2], args.get(0).getObj()));
            return null;
        }
    });
    info.addExternalFunc("g_print_err", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "错误输出";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            logger.error(args.get(0).getObj());
            return null;
        }
    });
    info.addExternalFunc("g_to_string", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "将对象转换成字符串";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
            RuntimeObject obj = args.get(0);
            if (obj == null) {
                return new RuntimeObject(null);
            }
            return new RuntimeObject(String.valueOf(args.get(0).getObj()));
        }
    });
    info.addExternalFunc("g_new", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "深拷贝";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            return args.get(0).clone();
        }
    });
    info.addExternalFunc("g_doc", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "文档";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            return new RuntimeObject(status.getHelpString(args.get(0).getObj().toString()));
        }
    });
    info.addExternalFunc("g_get_type", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "获取类型";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            return new RuntimeObject(args.get(0).getTypeName());
        }
    });
    info.addExternalFunc("g_get_type_ordinal", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "获取类型(索引)";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            return new RuntimeObject(BigInteger.valueOf(args.get(0).getTypeIndex()));
        }
    });
    info.addExternalFunc("g_type", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "获取类型";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            return new RuntimeObject(args.get(0).getTypeString());
        }
    });
    info.addExternalFunc("g_hash", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "获取哈希";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            if (args.get(0).getObj() == null)
                return new RuntimeObject("NULL");
            return new RuntimeObject(String.valueOf(args.get(0).getObj().hashCode()));
        }
    });
    info.addExternalFunc("g_exit", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "程序退出";
        }

        @Override
        public RuntimeObjectType[] getArgsType() {
            return null;
        }

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            throw new RuntimeException(RuntimeError.EXIT, -1, "用户自行退出");
        }
    });
    info.addExternalFunc("g_load", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "载入并运行程序";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            return new RuntimeObject(BigInteger.valueOf(status.runProcess(args.get(0).getObj().toString())));
        }
    });
    info.addExternalFunc("g_load_x", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "载入并运行程序";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            return new RuntimeObject(BigInteger.valueOf(status.runProcessX(args.get(0).getObj().toString())));
        }
    });
    info.addExternalFunc("g_load_user", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "载入并运行用户态程序";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            return new RuntimeObject(BigInteger.valueOf(status.runUsrProcess(args.get(0).getObj().toString())));
        }
    });
    info.addExternalFunc("g_load_user_x", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "载入并运行用户态程序";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            return new RuntimeObject(BigInteger.valueOf(status.runUsrProcessX(args.get(0).getObj().toString())));
        }
    });
    info.addExternalFunc("g_print_file", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "载入并运行程序";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
            try {
                BufferedReader br = new BufferedReader(new FileReader(args.get(0).getObj().toString()));
                String line;
                while ((line = br.readLine()) != null) {
                    System.out.println(line);
                }
                br.close();
            } catch (Exception e) {
                System.err.println(e.getMessage());
            }
            return null;
        }
    });
    buildIORead(info);
    return runtimeCodePage = page;
}
Also used : Grammar(priv.bajdcc.LALR1.grammar.Grammar) RuntimeException(priv.bajdcc.LALR1.grammar.runtime.RuntimeException) RuntimeException(priv.bajdcc.LALR1.grammar.runtime.RuntimeException) BufferedReader(java.io.BufferedReader) BigInteger(java.math.BigInteger) FileReader(java.io.FileReader)

Example 10 with RuntimeObject

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

the class RuntimeMachine method opLoadFunc.

@Override
public void opLoadFunc() throws RuntimeException {
    int idx = loadInt();
    RuntimeFuncObject func = new RuntimeFuncObject(pageName, idx);
    RuntimeObject obj = new RuntimeObject(func);
    int envSize = loadInt();
    FOR_LOOP: for (int i = 0; i < envSize; i++) {
        int id = loadInt();
        if (id == -1) {
            id = loadInt();
            String name = fetchFromGlobalData(id).getObj().toString();
            IRuntimeDebugValue value = currentPage.getInfo().getValueCallByName(name);
            if (value != null) {
                func.addEnv(id, value.getRuntimeObject());
                continue;
            }
            int index = currentPage.getInfo().getAddressOfExportFunc(name);
            if (index != -1) {
                func.addEnv(id, new RuntimeObject(new RuntimeFuncObject(pageName, index)));
                continue;
            }
            List<RuntimeCodePage> refers = pageRefer.get(currentPage.getInfo().getDataMap().get("name").toString());
            for (RuntimeCodePage page : refers) {
                value = page.getInfo().getValueCallByName(name);
                if (value != null) {
                    func.addEnv(id, value.getRuntimeObject());
                    continue FOR_LOOP;
                }
                index = page.getInfo().getAddressOfExportFunc(name);
                if (index != -1) {
                    func.addEnv(id, new RuntimeObject(new RuntimeFuncObject(page.getInfo().getDataMap().get("name").toString(), index)));
                    continue FOR_LOOP;
                }
            }
            err(RuntimeError.WRONG_LOAD_EXTERN, name);
        } else {
            func.addEnv(id, stack.findVariable(func.getPage(), id));
        }
    }
    stack.pushData(obj);
}
Also used : RuntimeFuncObject(priv.bajdcc.LALR1.grammar.runtime.data.RuntimeFuncObject)

Aggregations

RuntimeArray (priv.bajdcc.LALR1.grammar.runtime.data.RuntimeArray)9 BigInteger (java.math.BigInteger)6 Grammar (priv.bajdcc.LALR1.grammar.Grammar)6 RuntimeException (priv.bajdcc.LALR1.grammar.runtime.RuntimeException)4 RuntimeObject (priv.bajdcc.LALR1.grammar.runtime.RuntimeObject)4 RuntimeFuncObject (priv.bajdcc.LALR1.grammar.runtime.data.RuntimeFuncObject)4 BufferedReader (java.io.BufferedReader)3 List (java.util.List)3 Matcher (java.util.regex.Matcher)3 RuntimeMap (priv.bajdcc.LALR1.grammar.runtime.data.RuntimeMap)3 InputStreamReader (java.io.InputStreamReader)2 URL (java.net.URL)2 URLConnection (java.net.URLConnection)2 Pattern (java.util.regex.Pattern)2 Document (org.dom4j.Document)2 Node (org.dom4j.Node)2 SAXReader (org.dom4j.io.SAXReader)2 RuntimeCodePage (priv.bajdcc.LALR1.grammar.runtime.RuntimeCodePage)2 ModuleNetClient (priv.bajdcc.LALR1.interpret.module.net.ModuleNetClient)2 ModuleNetServer (priv.bajdcc.LALR1.interpret.module.net.ModuleNetServer)2