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;
}
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;
}
});
}
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;
}
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()));
}
});
}
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;
}
Aggregations