Search in sources :

Example 11 with IRuntimeDebugInfo

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

the class ModuleStdBase 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();
    return runtimeCodePage = page;
}
Also used : Grammar(priv.bajdcc.LALR1.grammar.Grammar) RuntimeCodePage(priv.bajdcc.LALR1.grammar.runtime.RuntimeCodePage) IRuntimeDebugInfo(priv.bajdcc.LALR1.grammar.runtime.IRuntimeDebugInfo)

Example 12 with IRuntimeDebugInfo

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

the class ModuleStdShell 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();
    return runtimeCodePage = page;
}
Also used : Grammar(priv.bajdcc.LALR1.grammar.Grammar) RuntimeCodePage(priv.bajdcc.LALR1.grammar.runtime.RuntimeCodePage) IRuntimeDebugInfo(priv.bajdcc.LALR1.grammar.runtime.IRuntimeDebugInfo)

Example 13 with IRuntimeDebugInfo

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

the class ModuleBase method getCodePage.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Example 14 with IRuntimeDebugInfo

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

the class ModuleRemote 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 15 with IRuntimeDebugInfo

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

the class ModuleTask 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();
    buildSystemMethod(info);
    buildUtilMethod(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