Search in sources :

Example 6 with RuntimeCodePage

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

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

Example 7 with RuntimeCodePage

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

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

the class ModuleMath 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_PI", () -> new RuntimeObject(BigDecimal.valueOf(Math.PI)));
    info.addExternalValue("g_PI_2", () -> new RuntimeObject(BigDecimal.valueOf(Math.PI * 2.0)));
    info.addExternalValue("g_E", () -> new RuntimeObject(BigDecimal.valueOf(Math.E)));
    info.addExternalValue("g_random", () -> new RuntimeObject(BigDecimal.valueOf(rand.nextDouble())));
    buildUnaryFunc(info);
    return runtimeCodePage = page;
}
Also used : Grammar(priv.bajdcc.LALR1.grammar.Grammar)

Example 9 with RuntimeCodePage

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

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

the class TestInterpret9 method main.

public static void main(String[] args) {
    try {
        String[] codes = new String[] { "import \"sys.base\"; import \"sys.proc\";\n" + "var a = func ~() {\n" + "    foreach (var i : call g_range(1, 10)) {\n" + "        call g_printn(\"[\" + call g_get_pid() + \"] Hello world!\");\n" + "    }\n" + "};\n" + "call g_create_process(a);\n" + "call a();\n" + "\n", "import \"sys.base\"; import \"sys.proc\";\n" + "var proc = func ~() {\n" + "    var handle = call g_create_pipe(\"test\");\n" + "    var print = func ~(ch) -> call g_print(ch);\n" + "    var pid = call g_get_pid();\n" + "    if (pid == 0) {\n" + "        foreach (var i : call g_range(1, 10)) {\n" + "            call g_printn(\"[\" + call g_get_pid() + \"] Hello world!\");\n" + "            call g_write_pipe(handle, \"\" + i);\n" + "        }\n" + "        call g_destroy_pipe(handle);\n" + "    } else {\n" + "        call g_printn(\"[\" + call g_get_pid() + \"] Hello world!\");\n" + "        call g_read_pipe(handle, print);\n" + "    }\n" + "};\n" + "call g_create_process(proc);\n" + "call proc();\n" + "\n", "import \"sys.base\";\n" + "import \"sys.list\";\n" + "import \"sys.proc\";\n" + "\n" + "var goods = [];\n" + "call g_start_share(\"goods\", goods);\n" + "var index = 1;\n" + "call g_start_share(\"index\", index);\n" + "var consumer = func ~() {\n" + "    for (;;) {\n" + "        var goods = call g_query_share(\"goods\");\n" + "        if (call g_is_null(goods)) {\n" + "            break;\n" + "        }\n" + "        var g = call g_array_pop(goods);\n" + "        if (!call g_is_null(g)) {\n" + "            call g_printn(\"Consumer#\" + call g_get_pid() + \" ---- get \" + g);\n" + "        }\n" + "    }\n" + "    call g_printn(\"Consumer#\" + call g_get_pid() + \" exit\");\n" + "};\n" + "var producer = func ~() {\n" + "    foreach (var i : call g_range(1, 5)) {\n" + "        var goods = call g_reference_share(\"goods\");\n" + "        call g_lock_share(\"index\");\n" + "        var index = call g_reference_share(\"index\");\n" + "        call g_printn(\"Producer#\" + call g_get_pid() + \" ++++ put \" + index);\n" + "        call g_array_add(goods, index);\n" + "        index++;\n" + "        call g_stop_share(\"index\");\n" + "        call g_unlock_share(\"index\");\n" + "        call g_stop_share(\"goods\");\n" + "    }\n" + "    call g_printn(\"Producer#\" + call g_get_pid() + \" exit\");\n" + "};\n" + "var create_consumer = func ~(n) {\n" + "    var handles = [];\n" + "    foreach (var i : call g_range(1, n)) {\n" + "        var h = call g_create_process(consumer);\n" + "        call g_array_add(handles, h);\n" + "        call g_printn(\"[\" + i + \"] Create consumer: #\" + h);\n" + "    }\n" + "    return handles;\n" + "};\n" + "var create_producer = func ~(n) {\n" + "    var handles = [];\n" + "    foreach (var i : call g_range(1, n)) {\n" + "        var h = call g_create_process(producer);\n" + "        call g_array_add(handles, h);\n" + "        call g_printn(\"[\" + i + \"] Create producer: #\" + h);\n" + "    }\n" + "    return handles;\n" + "};\n" + "\n" + "var consumers = call create_consumer(3);\n" + "var producers = call create_producer(4);\n" + "call g_printn(\"Waiting for producers to exit...\");\n" + "call g_join_process_array(producers);\n" + "call g_printn(\"Producers exit\");\n" + "call g_printn(\"Waiting for consumers to exit...\");\n" + "call g_stop_share(\"index\");\n" + "call g_stop_share(\"goods\");\n" + "call g_join_process_array(consumers);\n" + "call g_printn(\"Consumers exit\");\n" + "\n" };
        System.out.println(codes[codes.length - 1]);
        Interpreter interpreter = new Interpreter();
        Grammar grammar = new Grammar(codes[codes.length - 1]);
        // System.out.println(grammar.toString());
        RuntimeCodePage page = grammar.getCodePage();
        // System.out.println(page.toString());
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        RuntimeCodePage.exportFromStream(page, baos);
        ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
        interpreter.run("test_1", bais);
    } catch (RegexException e) {
        System.err.println();
        System.err.println(e.getPosition() + "," + e.getMessage());
        e.printStackTrace();
    } catch (SyntaxException e) {
        System.err.println();
        System.err.println(e.getPosition() + "," + e.getMessage() + " " + e.getInfo());
        e.printStackTrace();
    } catch (RuntimeException e) {
        System.err.println();
        System.err.println(e.getPosition() + ": " + e.getInfo());
        e.printStackTrace();
    } catch (Exception e) {
        System.err.println();
        System.err.println(e.getMessage());
        e.printStackTrace();
    }
}
Also used : Interpreter(priv.bajdcc.LALR1.interpret.Interpreter) RuntimeException(priv.bajdcc.LALR1.grammar.runtime.RuntimeException) ByteArrayInputStream(java.io.ByteArrayInputStream) SyntaxException(priv.bajdcc.LALR1.syntax.handler.SyntaxException) RegexException(priv.bajdcc.util.lexer.error.RegexException) Grammar(priv.bajdcc.LALR1.grammar.Grammar) RuntimeCodePage(priv.bajdcc.LALR1.grammar.runtime.RuntimeCodePage) ByteArrayOutputStream(java.io.ByteArrayOutputStream) SyntaxException(priv.bajdcc.LALR1.syntax.handler.SyntaxException) RuntimeException(priv.bajdcc.LALR1.grammar.runtime.RuntimeException) RegexException(priv.bajdcc.util.lexer.error.RegexException)

Aggregations

Grammar (priv.bajdcc.LALR1.grammar.Grammar)32 RuntimeCodePage (priv.bajdcc.LALR1.grammar.runtime.RuntimeCodePage)21 RuntimeException (priv.bajdcc.LALR1.grammar.runtime.RuntimeException)17 SyntaxException (priv.bajdcc.LALR1.syntax.handler.SyntaxException)16 RegexException (priv.bajdcc.util.lexer.error.RegexException)16 ByteArrayInputStream (java.io.ByteArrayInputStream)14 ByteArrayOutputStream (java.io.ByteArrayOutputStream)14 Interpreter (priv.bajdcc.LALR1.interpret.Interpreter)14 IRuntimeDebugInfo (priv.bajdcc.LALR1.grammar.runtime.IRuntimeDebugInfo)5 BigInteger (java.math.BigInteger)2 RuntimeMachine (priv.bajdcc.LALR1.grammar.runtime.RuntimeMachine)2 RuntimeObject (priv.bajdcc.LALR1.grammar.runtime.RuntimeObject)2 RuntimeFuncObject (priv.bajdcc.LALR1.grammar.runtime.data.RuntimeFuncObject)2 BufferedReader (java.io.BufferedReader)1 FileReader (java.io.FileReader)1 Scanner (java.util.Scanner)1 IRuntimeDebugExec (priv.bajdcc.LALR1.grammar.runtime.IRuntimeDebugExec)1 IRuntimeStatus (priv.bajdcc.LALR1.grammar.runtime.IRuntimeStatus)1 RuntimeArray (priv.bajdcc.LALR1.grammar.runtime.data.RuntimeArray)1 RuntimeMap (priv.bajdcc.LALR1.grammar.runtime.data.RuntimeMap)1