From dcfe0b2074a871416530c124937811d71f71cf75 Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Sat, 6 Aug 2016 20:34:20 +0300 Subject: Create 'io' module Move 'input' and 'output' builtins to said module Rename wrongly named power builtin to 'pow' --- .../core/runtime/builtins/BuiltinManager.java | 32 +++++++++++--- .../builtins/globals/InputBuiltinFunction.java | 50 --------------------- .../builtins/globals/OutputBuiltinFunction.java | 40 ----------------- .../builtins/globals/io/InputBuiltinFunction.java | 51 ++++++++++++++++++++++ .../builtins/globals/io/OutputBuiltinFunction.java | 41 +++++++++++++++++ 5 files changed, 117 insertions(+), 97 deletions(-) delete mode 100644 src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/InputBuiltinFunction.java delete mode 100644 src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/OutputBuiltinFunction.java create mode 100644 src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/io/InputBuiltinFunction.java create mode 100644 src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/io/OutputBuiltinFunction.java diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinManager.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinManager.java index eb7374d..6758b25 100644 --- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinManager.java +++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinManager.java @@ -4,6 +4,8 @@ import com.jantuomi.tunkki.core.parser.datatype.CallableDatatype; import com.jantuomi.tunkki.core.runtime.builtins.globals.*; import com.jantuomi.tunkki.core.runtime.builtins.globals.cast.AsBooleanBuiltinFunction; import com.jantuomi.tunkki.core.runtime.builtins.globals.cast.AsIntBuiltinFunction; +import com.jantuomi.tunkki.core.runtime.builtins.globals.io.InputBuiltinFunction; +import com.jantuomi.tunkki.core.runtime.builtins.globals.io.OutputBuiltinFunction; import com.jantuomi.tunkki.core.runtime.builtins.math.PowerBuiltinFunction; import com.jantuomi.tunkki.exception.types.IncludeTunkkiError; import com.jantuomi.tunkki.exception.types.TunkkiError; @@ -23,7 +25,7 @@ public class BuiltinManager { private Map builtins = new HashMap<>(); public final Set BUILTIN_MODULES = new HashSet<>(Arrays.asList( - "math" + "math", "io", "cast" )); private BuiltinManager() { @@ -31,11 +33,7 @@ public class BuiltinManager { } private void initializeGlobals() { - builtins.put("output", new OutputBuiltinFunction().makeCallable()); - builtins.put("input", new InputBuiltinFunction().makeCallable()); builtins.put("concat", new ConcatBuiltinFunction().makeCallable()); - builtins.put("as_int", new AsIntBuiltinFunction().makeCallable()); - builtins.put("as_bool", new AsBooleanBuiltinFunction().makeCallable()); builtins.put("include", new IncludeBuiltinFunction().makeCallable()); builtins.put("list", new ListBuiltinFunction().makeCallable()); builtins.put("contains", new ContainsBuiltinFunction().makeCallable()); @@ -46,14 +44,34 @@ public class BuiltinManager { private Map getFunctionsFromMathModule() { Map map = new HashMap<>(); - map.put("math", new PowerBuiltinFunction().makeCallable()); + map.put("pow", new PowerBuiltinFunction().makeCallable()); + return map; + } + + private Map getFunctionsFromIOModule() { + Map map = new HashMap<>(); + map.put("input", new InputBuiltinFunction().makeCallable()); + map.put("output", new OutputBuiltinFunction().makeCallable()); + return map; + } + + private Map getFunctionsFromCastModule() { + Map map = new HashMap<>(); + builtins.put("as_int", new AsIntBuiltinFunction().makeCallable()); + builtins.put("as_bool", new AsBooleanBuiltinFunction().makeCallable()); return map; } public Map getFunctionsFromModule(String name) throws TunkkiError { - if (name.equals("math")) { + if ("math".equals(name)) { return getFunctionsFromMathModule(); } + else if ("io".equals(name)) { + return getFunctionsFromIOModule(); + } + else if ("cast".equals(name)) { + return getFunctionsFromCastModule(); + } else { throw new IncludeTunkkiError(-1, name); } diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/InputBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/InputBuiltinFunction.java deleted file mode 100644 index c7b53f0..0000000 --- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/InputBuiltinFunction.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.jantuomi.tunkki.core.runtime.builtins.globals; - -import com.jantuomi.tunkki.core.parser.datatype.Datatype; -import com.jantuomi.tunkki.core.parser.datatype.NadaDatatype; -import com.jantuomi.tunkki.core.parser.datatype.StringDatatype; -import com.jantuomi.tunkki.exception.types.TunkkiError; -import com.jantuomi.tunkki.utils.IO; - -import java.io.IOException; -import java.util.*; - -/** - * Created by jan on 21.6.2016. - */ -public class InputBuiltinFunction extends BuiltinFunction { - public InputBuiltinFunction() { - super( - Arrays.asList("expression") - ); - } - - @Override - public Datatype evaluate(List params) throws TunkkiError { - super.evaluate(params); - - Datatype param = params.get(0); - System.out.print(param.getData().toString()); - - String in; - try { - in = IO.getInstance().readLine(""); - return new StringDatatype(in); - } catch (IOException e) { - e.printStackTrace(); - return new NadaDatatype(); - } - } - - @Override - public boolean hasVariableArgumentList() { - return false; - } - - @Override - public List> getArgumentTypes() { - return Collections.singletonList( - createAcceptableTypeSet(Datatype.Type.String) - ); - } -} diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/OutputBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/OutputBuiltinFunction.java deleted file mode 100644 index b16f668..0000000 --- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/OutputBuiltinFunction.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.jantuomi.tunkki.core.runtime.builtins.globals; - -import com.jantuomi.tunkki.core.parser.datatype.Datatype; -import com.jantuomi.tunkki.core.parser.datatype.VoidDatatype; -import com.jantuomi.tunkki.exception.types.TunkkiError; -import com.jantuomi.tunkki.utils.IO; - -import java.util.Arrays; -import java.util.List; -import java.util.Set; - -/** - * Created by jan on 21.6.2016. - */ -public class OutputBuiltinFunction extends BuiltinFunction { - public OutputBuiltinFunction() { - super( - Arrays.asList("expression") - ); - } - - @Override - public Datatype evaluate(List params) throws TunkkiError { - Datatype param = params.get(0); - IO.getInstance().printLine(param.toString()); - return new VoidDatatype(); - } - - @Override - public boolean hasVariableArgumentList() { - return false; - } - - @Override - public List> getArgumentTypes() { - return Arrays.asList( - createAcceptableTypeSet(Datatype.Type.String) - ); - } -} diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/io/InputBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/io/InputBuiltinFunction.java new file mode 100644 index 0000000..47e6f23 --- /dev/null +++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/io/InputBuiltinFunction.java @@ -0,0 +1,51 @@ +package com.jantuomi.tunkki.core.runtime.builtins.globals.io; + +import com.jantuomi.tunkki.core.parser.datatype.Datatype; +import com.jantuomi.tunkki.core.parser.datatype.NadaDatatype; +import com.jantuomi.tunkki.core.parser.datatype.StringDatatype; +import com.jantuomi.tunkki.core.runtime.builtins.globals.BuiltinFunction; +import com.jantuomi.tunkki.exception.types.TunkkiError; +import com.jantuomi.tunkki.utils.IO; + +import java.io.IOException; +import java.util.*; + +/** + * Created by jan on 21.6.2016. + */ +public class InputBuiltinFunction extends BuiltinFunction { + public InputBuiltinFunction() { + super( + Arrays.asList("expression") + ); + } + + @Override + public Datatype evaluate(List params) throws TunkkiError { + super.evaluate(params); + + Datatype param = params.get(0); + System.out.print(param.getData().toString()); + + String in; + try { + in = IO.getInstance().readLine(""); + return new StringDatatype(in); + } catch (IOException e) { + e.printStackTrace(); + return new NadaDatatype(); + } + } + + @Override + public boolean hasVariableArgumentList() { + return false; + } + + @Override + public List> getArgumentTypes() { + return Collections.singletonList( + createAcceptableTypeSet(Datatype.Type.String) + ); + } +} diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/io/OutputBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/io/OutputBuiltinFunction.java new file mode 100644 index 0000000..cdefcc7 --- /dev/null +++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/io/OutputBuiltinFunction.java @@ -0,0 +1,41 @@ +package com.jantuomi.tunkki.core.runtime.builtins.globals.io; + +import com.jantuomi.tunkki.core.parser.datatype.Datatype; +import com.jantuomi.tunkki.core.parser.datatype.VoidDatatype; +import com.jantuomi.tunkki.core.runtime.builtins.globals.BuiltinFunction; +import com.jantuomi.tunkki.exception.types.TunkkiError; +import com.jantuomi.tunkki.utils.IO; + +import java.util.Arrays; +import java.util.List; +import java.util.Set; + +/** + * Created by jan on 21.6.2016. + */ +public class OutputBuiltinFunction extends BuiltinFunction { + public OutputBuiltinFunction() { + super( + Arrays.asList("expression") + ); + } + + @Override + public Datatype evaluate(List params) throws TunkkiError { + Datatype param = params.get(0); + IO.getInstance().printLine(param.toString()); + return new VoidDatatype(); + } + + @Override + public boolean hasVariableArgumentList() { + return false; + } + + @Override + public List> getArgumentTypes() { + return Arrays.asList( + createAcceptableTypeSet(Datatype.Type.String) + ); + } +} -- cgit v1.3