Search in sources :

Example 6 with IRuntimeDebugInfo

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

the class ModuleNet 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();
    buildRemoteMethods(info);
    return runtimeCodePage = page;
}
Also used : Grammar(priv.bajdcc.LALR1.grammar.Grammar)

Example 7 with IRuntimeDebugInfo

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

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

the class ModuleString 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();
    buildStringUtils(info);
    return runtimeCodePage = page;
}
Also used : Grammar(priv.bajdcc.LALR1.grammar.Grammar)

Example 9 with IRuntimeDebugInfo

use of priv.bajdcc.LALR1.grammar.runtime.IRuntimeDebugInfo 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 10 with IRuntimeDebugInfo

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

the class ModuleUI 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();
    buildUIMethods(info);
    return runtimeCodePage = page;
}
Also used : Grammar(priv.bajdcc.LALR1.grammar.Grammar)

Aggregations

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