Search in sources :

Example 1 with RuntimeArray

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

the class ModuleList 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_new_array", () -> new RuntimeObject(new RuntimeArray()));
    info.addExternalValue("g_new_map", () -> new RuntimeObject(new RuntimeMap()));
    buildMethod(info);
    return runtimeCodePage = page;
}
Also used : RuntimeArray(priv.bajdcc.LALR1.grammar.runtime.data.RuntimeArray) RuntimeMap(priv.bajdcc.LALR1.grammar.runtime.data.RuntimeMap) Grammar(priv.bajdcc.LALR1.grammar.Grammar)

Example 2 with RuntimeArray

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

the class ModuleNet method buildRemoteMethods.

private void buildRemoteMethods(IRuntimeDebugInfo info) {
    info.addExternalFunc("g_net_get", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "HTTP GET";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
            String text = "";
            String txt = String.valueOf(args.get(0).getObj());
            logger.debug("Request url: " + txt);
            try {
                URL url = new URL(txt);
                // 打开连接
                URLConnection urlConnection = url.openConnection();
                // 获取输入流
                BufferedReader br = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "utf-8"));
                String line = null;
                StringBuilder sb = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    sb.append(line).append("\n");
                }
                text = sb.toString();
                br.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return new RuntimeObject(text);
        }
    });
    info.addExternalFunc("g_net_get_json", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "HTTP GET - json";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
            String text = "";
            String txt = String.valueOf(args.get(0).getObj());
            logger.debug("Request url(json): " + txt);
            try {
                URL url = new URL(txt);
                // 打开连接
                URLConnection urlConnection = url.openConnection();
                // 获取输入流
                BufferedReader br = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "utf-8"));
                String line = null;
                StringBuilder sb = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    sb.append(line).append("\n");
                }
                text = sb.toString();
                br.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return parseJson(text);
        }
    });
    // -----------------------------------
    // server
    info.addExternalFunc("g_net_msg_create_server_internal", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "MSG SERVER";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
            if (getServer() != null || getClient() != null)
                return new RuntimeObject(false);
            int port = ((BigInteger) args.get(0).getObj()).intValue();
            setServer(new ModuleNetServer(port));
            getServer().start();
            return new RuntimeObject(true);
        }
    });
    info.addExternalFunc("g_net_msg_shutdown_server", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "MSG SERVER SHUTDOWN";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
            if (getServer() == null)
                return new RuntimeObject(false);
            getServer().exit();
            return new RuntimeObject(true);
        }
    });
    info.addExternalFunc("g_net_msg_get_server_status", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "MSG SERVER GET STATUS";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
            if (getServer() != null) {
                ModuleNetServer.Status s = getServer().getStatus();
                if (s == ModuleNetServer.Status.ERROR) {
                    lastError = getServer().getError();
                    setServer(null);
                }
                status.getService().getProcessService().sleep(status.getPid(), MSG_QUERY_TIME);
                return new RuntimeObject(BigInteger.valueOf(s.ordinal()));
            }
            return new RuntimeObject(BigInteger.valueOf(ModuleNetServer.Status.NULL.ordinal()));
        }
    });
    // server
    // -----------------------------------
    // client
    info.addExternalFunc("g_net_msg_create_client_internal", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "MSG CLIENT";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
            if (getServer() != null || getClient() != null)
                return new RuntimeObject(false);
            String addr = String.valueOf(args.get(0).getObj());
            setClient(new ModuleNetClient(addr));
            getClient().start();
            return new RuntimeObject(true);
        }
    });
    info.addExternalFunc("g_net_msg_shutdown_client", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "MSG CLIENT SHUTDOWN";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
            if (getClient() == null)
                return new RuntimeObject(false);
            getClient().exit();
            return new RuntimeObject(true);
        }
    });
    info.addExternalFunc("g_net_msg_get_client_status", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "MSG CLIENT GET STATUS";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
            if (getClient() != null) {
                ModuleNetClient.Status s = getClient().getStatus();
                if (s == ModuleNetClient.Status.ERROR) {
                    lastError = getClient().getError();
                    setClient(null);
                }
                status.getService().getProcessService().sleep(status.getPid(), MSG_QUERY_TIME);
                return new RuntimeObject(BigInteger.valueOf(s.ordinal()));
            }
            return new RuntimeObject(BigInteger.valueOf(ModuleNetClient.Status.NULL.ordinal()));
        }
    });
    info.addExternalFunc("g_net_msg_client_send", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "MSG CLIENT SEND";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
            if (getClient() != null) {
                ModuleNetClient.Status s = getClient().getStatus();
                if (s == ModuleNetClient.Status.RUNNING) {
                    status.getService().getProcessService().sleep(status.getPid(), MSG_SEND_TIME);
                    getClient().send(String.valueOf(args.get(0).getObj()));
                    return new RuntimeObject(true);
                }
            }
            return new RuntimeObject(false);
        }
    });
    info.addExternalFunc("g_net_msg_client_send_with_origin", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "MSG CLIENT SEND(ORIGIN)";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
            if (getClient() != null) {
                ModuleNetClient.Status s = getClient().getStatus();
                if (s == ModuleNetClient.Status.RUNNING) {
                    status.getService().getProcessService().sleep(status.getPid(), MSG_SEND_TIME);
                    getClient().send(String.valueOf(args.get(0).getObj()), String.valueOf(args.get(1).getObj()));
                    return new RuntimeObject(true);
                }
            }
            return new RuntimeObject(false);
        }
    });
    info.addExternalFunc("g_net_msg_server_send", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "MSG SERVER SEND";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
            if (getServer() != null) {
                ModuleNetServer.Status s = getServer().getStatus();
                if (s == ModuleNetServer.Status.RUNNING) {
                    status.getService().getProcessService().sleep(status.getPid(), MSG_SEND_TIME);
                    getServer().send(String.valueOf(args.get(0).getObj()));
                    return new RuntimeObject(true);
                }
            }
            return new RuntimeObject(false);
        }
    });
    info.addExternalFunc("g_net_msg_server_send_error", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "MSG SERVER SEND ERROR";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
            if (getServer() != null) {
                ModuleNetServer.Status s = getServer().getStatus();
                if (s == ModuleNetServer.Status.RUNNING) {
                    status.getService().getProcessService().sleep(status.getPid(), MSG_SEND_TIME);
                    getServer().send_error(String.valueOf(args.get(0).getObj()));
                    return new RuntimeObject(true);
                }
            }
            return new RuntimeObject(false);
        }
    });
    info.addExternalFunc("g_net_msg_server_send_with_origin", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "MSG SERVER SEND(ORIGIN)";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
            if (getServer() != null) {
                ModuleNetServer.Status s = getServer().getStatus();
                if (s == ModuleNetServer.Status.RUNNING) {
                    status.getService().getProcessService().sleep(status.getPid(), MSG_SEND_TIME);
                    getServer().send(String.valueOf(args.get(0).getObj()), String.valueOf(args.get(1).getObj()));
                    return new RuntimeObject(true);
                }
            }
            return new RuntimeObject(false);
        }
    });
    // client
    // -----------------------------------
    info.addExternalFunc("g_net_msg_get_error", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "MSG SERVER GET ERROR";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
            return new RuntimeObject(lastError);
        }
    });
    info.addExternalFunc("g_net_msg_get_server_msg", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "MSG SERVER GET MESSAGE";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
            return new RuntimeObject(getServer() == null ? null : getServer().getMessage());
        }
    });
    info.addExternalFunc("g_net_msg_get_client_msg", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "MSG CLIENT GET MESSAGE";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
            return new RuntimeObject(getClient() == null ? null : getClient().getMessage());
        }
    });
    info.addExternalFunc("g_net_msg_get_client_addr", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "MSG CLIENT GET ADDRESS";
        }

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

        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
            return new RuntimeObject(getClient() == null ? null : getClient().getAddr());
        }
    });
    info.addExternalFunc("g_net_parse_json", new IRuntimeDebugExec() {

        @Override
        public String getDoc() {
            return "Parse json";
        }

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

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

        @Override
        public String getDoc() {
            return "RSS GET(BAIDU)";
        }

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

        @SuppressWarnings("unchecked")
        @Override
        public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
            String text = "";
            String txt = String.valueOf(args.get(0).getObj());
            logger.debug("Request url(rss): " + txt);
            RuntimeArray array = new RuntimeArray();
            final Pattern pattern = Pattern.compile("<br>(.*)<br />");
            try {
                SAXReader reader = new SAXReader();
                Document document = reader.read(txt);
                Node title = document.selectSingleNode("//title");
                array.add(new RuntimeObject(title.getText()));
                List<Node> list = document.selectNodes("//item");
                for (Node item : list) {
                    String itemTitle = item.valueOf("title");
                    array.add(new RuntimeObject(itemTitle));
                    String itemDescription = item.valueOf("description");
                    Matcher matcher = pattern.matcher(itemDescription);
                    if (matcher.find()) {
                        array.add(new RuntimeObject(matcher.group(1)));
                    } else {
                        array.add(new RuntimeObject(itemDescription.replace("<br />", "")));
                    }
                }
                return new RuntimeObject(array);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return new RuntimeObject(array);
        }
    });
}
Also used : Pattern(java.util.regex.Pattern) RuntimeArray(priv.bajdcc.LALR1.grammar.runtime.data.RuntimeArray) InputStreamReader(java.io.InputStreamReader) ModuleNetClient(priv.bajdcc.LALR1.interpret.module.net.ModuleNetClient) Matcher(java.util.regex.Matcher) SAXReader(org.dom4j.io.SAXReader) Node(org.dom4j.Node) Document(org.dom4j.Document) URL(java.net.URL) URLConnection(java.net.URLConnection) BufferedReader(java.io.BufferedReader) List(java.util.List) ModuleNetServer(priv.bajdcc.LALR1.interpret.module.net.ModuleNetServer)

Example 3 with RuntimeArray

use of priv.bajdcc.LALR1.grammar.runtime.data.RuntimeArray 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 4 with RuntimeArray

use of priv.bajdcc.LALR1.grammar.runtime.data.RuntimeArray 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 5 with RuntimeArray

use of priv.bajdcc.LALR1.grammar.runtime.data.RuntimeArray 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)

Aggregations

RuntimeArray (priv.bajdcc.LALR1.grammar.runtime.data.RuntimeArray)9 BigInteger (java.math.BigInteger)4 List (java.util.List)3 Matcher (java.util.regex.Matcher)3 BufferedReader (java.io.BufferedReader)2 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 Grammar (priv.bajdcc.LALR1.grammar.Grammar)2 RuntimeException (priv.bajdcc.LALR1.grammar.runtime.RuntimeException)2 RuntimeObject (priv.bajdcc.LALR1.grammar.runtime.RuntimeObject)2 RuntimeMap (priv.bajdcc.LALR1.grammar.runtime.data.RuntimeMap)2 ModuleNetClient (priv.bajdcc.LALR1.interpret.module.net.ModuleNetClient)2 ModuleNetServer (priv.bajdcc.LALR1.interpret.module.net.ModuleNetServer)2 JSON (com.alibaba.fastjson.JSON)1 JSONArray (com.alibaba.fastjson.JSONArray)1