From 076a2400bc53582f9bea049e9c8e34efd2411a31 Mon Sep 17 00:00:00 2001 From: jantuomi Date: Mon, 1 Aug 2016 13:58:27 +0300 Subject: Move builtin functions to 'global' package --- .../com/jantuomi/tunkki/core/runtime/State.java | 2 +- .../runtime/builtins/AsIntBuiltinFunction.java | 50 ------------------ .../core/runtime/builtins/BuiltinFunction.java | 23 --------- .../core/runtime/builtins/BuiltinManager.java | 41 --------------- .../runtime/builtins/ConcatBuiltinFunction.java | 36 ------------- .../runtime/builtins/ContainsBuiltinFunction.java | 44 ---------------- .../runtime/builtins/EqualsBuiltinFunction.java | 33 ------------ .../core/runtime/builtins/GetBuiltinFunction.java | 48 ------------------ .../runtime/builtins/IncludeBuiltinFunction.java | 59 ---------------------- .../runtime/builtins/InputBuiltinFunction.java | 36 ------------- .../core/runtime/builtins/ListBuiltinFunction.java | 28 ---------- .../runtime/builtins/OutputBuiltinFunction.java | 31 ------------ .../builtins/globals/AsIntBuiltinFunction.java | 50 ++++++++++++++++++ .../runtime/builtins/globals/BuiltinFunction.java | 23 +++++++++ .../runtime/builtins/globals/BuiltinManager.java | 39 ++++++++++++++ .../builtins/globals/ConcatBuiltinFunction.java | 36 +++++++++++++ .../builtins/globals/ContainsBuiltinFunction.java | 44 ++++++++++++++++ .../builtins/globals/EqualsBuiltinFunction.java | 33 ++++++++++++ .../builtins/globals/GetBuiltinFunction.java | 48 ++++++++++++++++++ .../builtins/globals/IncludeBuiltinFunction.java | 58 +++++++++++++++++++++ .../builtins/globals/InputBuiltinFunction.java | 36 +++++++++++++ .../builtins/globals/ListBuiltinFunction.java | 28 ++++++++++ .../builtins/globals/OutputBuiltinFunction.java | 31 ++++++++++++ 23 files changed, 427 insertions(+), 430 deletions(-) delete mode 100644 src/main/com/jantuomi/tunkki/core/runtime/builtins/AsIntBuiltinFunction.java delete mode 100644 src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinFunction.java delete mode 100644 src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinManager.java delete mode 100644 src/main/com/jantuomi/tunkki/core/runtime/builtins/ConcatBuiltinFunction.java delete mode 100644 src/main/com/jantuomi/tunkki/core/runtime/builtins/ContainsBuiltinFunction.java delete mode 100644 src/main/com/jantuomi/tunkki/core/runtime/builtins/EqualsBuiltinFunction.java delete mode 100644 src/main/com/jantuomi/tunkki/core/runtime/builtins/GetBuiltinFunction.java delete mode 100644 src/main/com/jantuomi/tunkki/core/runtime/builtins/IncludeBuiltinFunction.java delete mode 100644 src/main/com/jantuomi/tunkki/core/runtime/builtins/InputBuiltinFunction.java delete mode 100644 src/main/com/jantuomi/tunkki/core/runtime/builtins/ListBuiltinFunction.java delete mode 100644 src/main/com/jantuomi/tunkki/core/runtime/builtins/OutputBuiltinFunction.java create mode 100644 src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/AsIntBuiltinFunction.java create mode 100644 src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/BuiltinFunction.java create mode 100644 src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/BuiltinManager.java create mode 100644 src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ConcatBuiltinFunction.java create mode 100644 src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ContainsBuiltinFunction.java create mode 100644 src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/EqualsBuiltinFunction.java create mode 100644 src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/GetBuiltinFunction.java create mode 100644 src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/IncludeBuiltinFunction.java create mode 100644 src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/InputBuiltinFunction.java create mode 100644 src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ListBuiltinFunction.java create mode 100644 src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/OutputBuiltinFunction.java diff --git a/src/main/com/jantuomi/tunkki/core/runtime/State.java b/src/main/com/jantuomi/tunkki/core/runtime/State.java index 742e603..cdcbacd 100644 --- a/src/main/com/jantuomi/tunkki/core/runtime/State.java +++ b/src/main/com/jantuomi/tunkki/core/runtime/State.java @@ -2,7 +2,7 @@ package com.jantuomi.tunkki.core.runtime; import com.jantuomi.tunkki.core.parser.datatype.Datatype; import com.jantuomi.tunkki.core.parser.datatype.NadaDatatype; -import com.jantuomi.tunkki.core.runtime.builtins.BuiltinManager; +import com.jantuomi.tunkki.core.runtime.builtins.globals.BuiltinManager; import com.jantuomi.tunkki.exception.TunkkiError; import java.util.Arrays; diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/AsIntBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/AsIntBuiltinFunction.java deleted file mode 100644 index 2c18e11..0000000 --- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/AsIntBuiltinFunction.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.jantuomi.tunkki.core.runtime.builtins; - -import com.jantuomi.tunkki.core.parser.datatype.BooleanDatatype; -import com.jantuomi.tunkki.core.parser.datatype.Datatype; -import com.jantuomi.tunkki.core.parser.datatype.IntegerDatatype; -import com.jantuomi.tunkki.core.parser.datatype.StringDatatype; -import com.jantuomi.tunkki.exception.TunkkiError; - -import java.util.Arrays; -import java.util.List; - -/** - * Created by jan on 21.6.2016. - */ -public class AsIntBuiltinFunction extends BuiltinFunction { - public AsIntBuiltinFunction() { - super( - Arrays.asList("expression") - ); - } - - @Override - public String getName() { - return "as_int"; - } - - @Override - public Datatype evaluate(List params) throws TunkkiError { - if (params.size() != 1) { - return null; - } - Datatype param = params.get(0); - int i = 0; - if (param instanceof StringDatatype) { - try { - i = Integer.parseInt(((StringDatatype) param).getData()); - } - catch (NumberFormatException ex) { - return null; - } - } - else if (param instanceof IntegerDatatype) { - i = ((IntegerDatatype) param).getData(); - } - else if (param instanceof BooleanDatatype) { - i = ((BooleanDatatype) param).getData() ? 1 : 0; - } - return new IntegerDatatype(i); - } -} diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinFunction.java deleted file mode 100644 index af02f5f..0000000 --- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinFunction.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.jantuomi.tunkki.core.runtime.builtins; - -import com.jantuomi.tunkki.core.parser.datatype.Datatype; -import com.jantuomi.tunkki.core.runtime.Function; -import com.jantuomi.tunkki.exception.TunkkiError; - -import java.util.List; - -/** - * Created by jan on 28.6.2016. - */ -abstract public class BuiltinFunction extends Function{ - public BuiltinFunction(List argumentNames) { - super(argumentNames, null); - BuiltinManager.getInstance().addBuiltin(this); - } - - @Override - abstract public Datatype evaluate(List params) throws TunkkiError; - - @Override - abstract public String getName(); -} diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinManager.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinManager.java deleted file mode 100644 index c902f44..0000000 --- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinManager.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.jantuomi.tunkki.core.runtime.builtins; - -import com.jantuomi.tunkki.core.runtime.Function; - -import java.util.ArrayList; -import java.util.List; - -/** - * Created by jan on 21.6.2016. - */ -public class BuiltinManager { - private static BuiltinManager instance = new BuiltinManager(); - - public static BuiltinManager getInstance() { - return instance; - } - - private List builtins; - - private BuiltinManager() { - instance = this; - builtins = new ArrayList<>(); - new OutputBuiltinFunction(); - new InputBuiltinFunction(); - new ConcatBuiltinFunction(); - new AsIntBuiltinFunction(); - new IncludeBuiltinFunction(); - new ListBuiltinFunction(); - new ContainsBuiltinFunction(); - new GetBuiltinFunction(); - new EqualsBuiltinFunction(); - } - - public void addBuiltin(BuiltinFunction func) { - builtins.add(func); - } - - public List getBuiltins() { - return builtins; - } -} diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/ConcatBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/ConcatBuiltinFunction.java deleted file mode 100644 index 8e3ca68..0000000 --- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/ConcatBuiltinFunction.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.jantuomi.tunkki.core.runtime.builtins; - -import com.jantuomi.tunkki.core.parser.datatype.Datatype; -import com.jantuomi.tunkki.core.parser.datatype.StringDatatype; -import com.jantuomi.tunkki.exception.TunkkiError; - -import java.util.Arrays; -import java.util.List; - -/** - * Created by jan on 21.6.2016. - */ -public class ConcatBuiltinFunction extends BuiltinFunction { - public ConcatBuiltinFunction() { - super( - Arrays.asList("strings") - ); - } - - @Override - public String getName() { - return "concat"; - } - - @Override - public Datatype evaluate(List params) throws TunkkiError { - StringBuilder sb = new StringBuilder(); - for (Datatype d : params) { - sb.append(d.getData()); - } - - return new StringDatatype( - sb.toString() - ); - } -} diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/ContainsBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/ContainsBuiltinFunction.java deleted file mode 100644 index 256340a..0000000 --- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/ContainsBuiltinFunction.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.jantuomi.tunkki.core.runtime.builtins; - -import com.jantuomi.tunkki.core.parser.datatype.BooleanDatatype; -import com.jantuomi.tunkki.core.parser.datatype.Datatype; -import com.jantuomi.tunkki.core.parser.datatype.ListDatatype; -import com.jantuomi.tunkki.exception.TunkkiError; - -import java.util.Arrays; -import java.util.List; - -/** - * Created by jan on 27.7.2016. - */ -public class ContainsBuiltinFunction extends BuiltinFunction { - public ContainsBuiltinFunction() { - super(Arrays.asList("list", "element")); - } - - @Override - public Datatype evaluate(List params) throws TunkkiError { - if (params.size() != 2) { - throw new TunkkiError(TunkkiError.ExceptionType.FunctionArgumentError, -1, getName(), Datatype.toString(params)); - } - - if (params.get(0).getType() != Datatype.Type.List) { - throw new TunkkiError(TunkkiError.ExceptionType.FunctionArgumentError, -1, getName(), Datatype.toString(params)); - } - - ListDatatype list = (ListDatatype) params.get(0); - Datatype comp = params.get(1); - - for (Datatype elem : list.getData()) { - if (elem.equals(comp).getData()) { - return new BooleanDatatype(true); - } - } - return new BooleanDatatype(false); - } - - @Override - public String getName() { - return "contains"; - } -} diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/EqualsBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/EqualsBuiltinFunction.java deleted file mode 100644 index 6b1ed1a..0000000 --- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/EqualsBuiltinFunction.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.jantuomi.tunkki.core.runtime.builtins; - -import com.jantuomi.tunkki.core.parser.datatype.BooleanDatatype; -import com.jantuomi.tunkki.core.parser.datatype.Datatype; -import com.jantuomi.tunkki.exception.TunkkiError; - -import java.util.Arrays; -import java.util.List; - -/** - * Created by jan on 31.7.2016. - */ -public class EqualsBuiltinFunction extends BuiltinFunction { - public EqualsBuiltinFunction() { - super(Arrays.asList("lhs", "rhs")); - } - - @Override - public Datatype evaluate(List params) throws TunkkiError { - if (params.size() != 2) { - throw new TunkkiError(TunkkiError.ExceptionType.FunctionArgumentError, -1, getName(), Datatype.toString(params)); - } - - return new BooleanDatatype( - params.get(0).equals(params.get(1)).getData() - ); - } - - @Override - public String getName() { - return "eq"; - } -} diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/GetBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/GetBuiltinFunction.java deleted file mode 100644 index 117ada2..0000000 --- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/GetBuiltinFunction.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.jantuomi.tunkki.core.runtime.builtins; - -import com.jantuomi.tunkki.core.parser.datatype.Datatype; -import com.jantuomi.tunkki.core.parser.datatype.IntegerDatatype; -import com.jantuomi.tunkki.core.parser.datatype.ListDatatype; -import com.jantuomi.tunkki.exception.TunkkiError; - -import java.util.Arrays; -import java.util.List; - -/** - * Created by jan on 28.7.2016. - */ -public class GetBuiltinFunction extends BuiltinFunction { - public GetBuiltinFunction() { - super(Arrays.asList("index")); - } - - @Override - public Datatype evaluate(List params) throws TunkkiError { - if (params.size() != 2) { - throw new TunkkiError(TunkkiError.ExceptionType.FunctionArgumentError, -1, getName(), params.toString()); - } - - if (params.get(0).getType() != Datatype.Type.List) { - throw new TunkkiError(TunkkiError.ExceptionType.FunctionArgumentError, -1, getName(), Datatype.toString(params)); - } - - if (params.get(1).getType() != Datatype.Type.Integer) { - throw new TunkkiError(TunkkiError.ExceptionType.FunctionArgumentError, -1, getName(), Datatype.toString(params)); - } - - ListDatatype list = (ListDatatype) params.get(0); - IntegerDatatype index = (IntegerDatatype) params.get(1); - - try { - return list.getData().get(index.getData()); - } - catch (Exception ex) { - throw new TunkkiError(TunkkiError.ExceptionType.GeneralError, -1, "List index out of bounds."); - } - } - - @Override - public String getName() { - return "get"; - } -} diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/IncludeBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/IncludeBuiltinFunction.java deleted file mode 100644 index 8db1d62..0000000 --- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/IncludeBuiltinFunction.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.jantuomi.tunkki.core.runtime.builtins; - - -import com.jantuomi.tunkki.Main; -import com.jantuomi.tunkki.Tunkki; -import com.jantuomi.tunkki.core.CommandLineArgumentContainer; -import com.jantuomi.tunkki.core.parser.datatype.Datatype; -import com.jantuomi.tunkki.core.parser.datatype.StringDatatype; -import com.jantuomi.tunkki.core.parser.datatype.VoidDatatype; -import com.jantuomi.tunkki.exception.ExceptionManager; -import com.jantuomi.tunkki.exception.TunkkiError; - -import java.util.Arrays; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * Created by jan on 28.6.2016. - */ -public class IncludeBuiltinFunction extends BuiltinFunction { - - public IncludeBuiltinFunction() { - super(Arrays.asList("filename")); - } - - @Override - public Datatype evaluate(List params) throws TunkkiError { - String filename; - if (params.size() == 1 && params.get(0).getType() == Datatype.Type.String) { - filename = ((StringDatatype) params.get(0)).getData(); - } else { - ExceptionManager.raise(TunkkiError.ExceptionType.GeneralError, -1, "Include argument must be a valid file name string."); - return null; - } - - String contents = CommandLineArgumentContainer.getInstance().readFileContents(filename); - - if (contents == null) { - return null; - } - - String regex = String.format(".*include\\?\\s+\"\\s?%s\\s?\"\\s?\\!.*", Pattern.quote(filename)); - Pattern pattern = Pattern.compile(regex, Pattern.DOTALL); - Matcher matcher = pattern.matcher(contents); - if (matcher.matches()) { - ExceptionManager.raise(TunkkiError.ExceptionType.GeneralError, -1, "Recursive include detected, aborting."); - return null; - } - - Tunkki.getInstance().run(contents); - return new VoidDatatype(); - } - - @Override - public String getName() { - return "include"; - } -} diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/InputBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/InputBuiltinFunction.java deleted file mode 100644 index 3c10566..0000000 --- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/InputBuiltinFunction.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.jantuomi.tunkki.core.runtime.builtins; - -import com.jantuomi.tunkki.core.parser.datatype.Datatype; -import com.jantuomi.tunkki.core.parser.datatype.StringDatatype; -import com.jantuomi.tunkki.exception.TunkkiError; - -import java.util.Arrays; -import java.util.List; -import java.util.Scanner; - -/** - * Created by jan on 21.6.2016. - */ -public class InputBuiltinFunction extends BuiltinFunction { - public InputBuiltinFunction() { - super( - Arrays.asList("expression") - ); - } - - @Override - public String getName() { - return "input"; - } - - @Override - public Datatype evaluate(List params) throws TunkkiError { - if (params.size() > 0) { - Datatype param = params.get(0); - System.out.print(param.getData().toString()); - } - Scanner in = new Scanner(System.in); - String userInput = in.nextLine(); - return new StringDatatype(userInput); - } -} diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/ListBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/ListBuiltinFunction.java deleted file mode 100644 index a524d60..0000000 --- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/ListBuiltinFunction.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.jantuomi.tunkki.core.runtime.builtins; - -import com.jantuomi.tunkki.core.parser.datatype.Datatype; -import com.jantuomi.tunkki.core.parser.datatype.ListDatatype; -import com.jantuomi.tunkki.exception.TunkkiError; - -import java.util.Arrays; -import java.util.List; - -/** - * Created by jan on 27.7.2016. - */ -public class ListBuiltinFunction extends BuiltinFunction { - public ListBuiltinFunction() { - super(Arrays.asList("elements")); - } - - @Override - public Datatype evaluate(List params) throws TunkkiError { - ListDatatype data = new ListDatatype(params); - return data; - } - - @Override - public String getName() { - return "list"; - } -} diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/OutputBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/OutputBuiltinFunction.java deleted file mode 100644 index ea86d48..0000000 --- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/OutputBuiltinFunction.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.jantuomi.tunkki.core.runtime.builtins; - -import com.jantuomi.tunkki.core.parser.datatype.Datatype; -import com.jantuomi.tunkki.core.parser.datatype.VoidDatatype; -import com.jantuomi.tunkki.exception.TunkkiError; - -import java.util.Arrays; -import java.util.List; - -/** - * Created by jan on 21.6.2016. - */ -public class OutputBuiltinFunction extends BuiltinFunction { - public OutputBuiltinFunction() { - super( - Arrays.asList("expression") - ); - } - - @Override - public String getName() { - return "output"; - } - - @Override - public Datatype evaluate(List params) throws TunkkiError { - Datatype param = params.get(0); - System.out.println(param.getData().toString()); - return new VoidDatatype(); - } -} diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/AsIntBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/AsIntBuiltinFunction.java new file mode 100644 index 0000000..adb5209 --- /dev/null +++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/AsIntBuiltinFunction.java @@ -0,0 +1,50 @@ +package com.jantuomi.tunkki.core.runtime.builtins.globals; + +import com.jantuomi.tunkki.core.parser.datatype.BooleanDatatype; +import com.jantuomi.tunkki.core.parser.datatype.Datatype; +import com.jantuomi.tunkki.core.parser.datatype.IntegerDatatype; +import com.jantuomi.tunkki.core.parser.datatype.StringDatatype; +import com.jantuomi.tunkki.exception.TunkkiError; + +import java.util.Arrays; +import java.util.List; + +/** + * Created by jan on 21.6.2016. + */ +public class AsIntBuiltinFunction extends BuiltinFunction { + public AsIntBuiltinFunction() { + super( + Arrays.asList("expression") + ); + } + + @Override + public String getName() { + return "as_int"; + } + + @Override + public Datatype evaluate(List params) throws TunkkiError { + if (params.size() != 1) { + return null; + } + Datatype param = params.get(0); + int i = 0; + if (param instanceof StringDatatype) { + try { + i = Integer.parseInt(((StringDatatype) param).getData()); + } + catch (NumberFormatException ex) { + return null; + } + } + else if (param instanceof IntegerDatatype) { + i = ((IntegerDatatype) param).getData(); + } + else if (param instanceof BooleanDatatype) { + i = ((BooleanDatatype) param).getData() ? 1 : 0; + } + return new IntegerDatatype(i); + } +} diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/BuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/BuiltinFunction.java new file mode 100644 index 0000000..4efa1da --- /dev/null +++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/BuiltinFunction.java @@ -0,0 +1,23 @@ +package com.jantuomi.tunkki.core.runtime.builtins.globals; + +import com.jantuomi.tunkki.core.parser.datatype.Datatype; +import com.jantuomi.tunkki.core.runtime.Function; +import com.jantuomi.tunkki.exception.TunkkiError; + +import java.util.List; + +/** + * Created by jan on 28.6.2016. + */ +abstract public class BuiltinFunction extends Function{ + public BuiltinFunction(List argumentNames) { + super(argumentNames, null); + BuiltinManager.getInstance().addBuiltin(this); + } + + @Override + abstract public Datatype evaluate(List params) throws TunkkiError; + + @Override + abstract public String getName(); +} diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/BuiltinManager.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/BuiltinManager.java new file mode 100644 index 0000000..5d6e5c2 --- /dev/null +++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/BuiltinManager.java @@ -0,0 +1,39 @@ +package com.jantuomi.tunkki.core.runtime.builtins.globals; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by jan on 21.6.2016. + */ +public class BuiltinManager { + private static BuiltinManager instance = new BuiltinManager(); + + public static BuiltinManager getInstance() { + return instance; + } + + private List builtins; + + private BuiltinManager() { + instance = this; + builtins = new ArrayList<>(); + new OutputBuiltinFunction(); + new InputBuiltinFunction(); + new ConcatBuiltinFunction(); + new AsIntBuiltinFunction(); + new IncludeBuiltinFunction(); + new ListBuiltinFunction(); + new ContainsBuiltinFunction(); + new GetBuiltinFunction(); + new EqualsBuiltinFunction(); + } + + public void addBuiltin(BuiltinFunction func) { + builtins.add(func); + } + + public List getBuiltins() { + return builtins; + } +} diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ConcatBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ConcatBuiltinFunction.java new file mode 100644 index 0000000..30becdc --- /dev/null +++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ConcatBuiltinFunction.java @@ -0,0 +1,36 @@ +package com.jantuomi.tunkki.core.runtime.builtins.globals; + +import com.jantuomi.tunkki.core.parser.datatype.Datatype; +import com.jantuomi.tunkki.core.parser.datatype.StringDatatype; +import com.jantuomi.tunkki.exception.TunkkiError; + +import java.util.Arrays; +import java.util.List; + +/** + * Created by jan on 21.6.2016. + */ +public class ConcatBuiltinFunction extends BuiltinFunction { + public ConcatBuiltinFunction() { + super( + Arrays.asList("strings") + ); + } + + @Override + public String getName() { + return "concat"; + } + + @Override + public Datatype evaluate(List params) throws TunkkiError { + StringBuilder sb = new StringBuilder(); + for (Datatype d : params) { + sb.append(d.getData()); + } + + return new StringDatatype( + sb.toString() + ); + } +} diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ContainsBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ContainsBuiltinFunction.java new file mode 100644 index 0000000..ebcc3b5 --- /dev/null +++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ContainsBuiltinFunction.java @@ -0,0 +1,44 @@ +package com.jantuomi.tunkki.core.runtime.builtins.globals; + +import com.jantuomi.tunkki.core.parser.datatype.BooleanDatatype; +import com.jantuomi.tunkki.core.parser.datatype.Datatype; +import com.jantuomi.tunkki.core.parser.datatype.ListDatatype; +import com.jantuomi.tunkki.exception.TunkkiError; + +import java.util.Arrays; +import java.util.List; + +/** + * Created by jan on 27.7.2016. + */ +public class ContainsBuiltinFunction extends BuiltinFunction { + public ContainsBuiltinFunction() { + super(Arrays.asList("list", "element")); + } + + @Override + public Datatype evaluate(List params) throws TunkkiError { + if (params.size() != 2) { + throw new TunkkiError(TunkkiError.ExceptionType.FunctionArgumentError, -1, getName(), Datatype.toString(params)); + } + + if (params.get(0).getType() != Datatype.Type.List) { + throw new TunkkiError(TunkkiError.ExceptionType.FunctionArgumentError, -1, getName(), Datatype.toString(params)); + } + + ListDatatype list = (ListDatatype) params.get(0); + Datatype comp = params.get(1); + + for (Datatype elem : list.getData()) { + if (elem.equals(comp).getData()) { + return new BooleanDatatype(true); + } + } + return new BooleanDatatype(false); + } + + @Override + public String getName() { + return "contains"; + } +} diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/EqualsBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/EqualsBuiltinFunction.java new file mode 100644 index 0000000..3a8f525 --- /dev/null +++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/EqualsBuiltinFunction.java @@ -0,0 +1,33 @@ +package com.jantuomi.tunkki.core.runtime.builtins.globals; + +import com.jantuomi.tunkki.core.parser.datatype.BooleanDatatype; +import com.jantuomi.tunkki.core.parser.datatype.Datatype; +import com.jantuomi.tunkki.exception.TunkkiError; + +import java.util.Arrays; +import java.util.List; + +/** + * Created by jan on 31.7.2016. + */ +public class EqualsBuiltinFunction extends BuiltinFunction { + public EqualsBuiltinFunction() { + super(Arrays.asList("lhs", "rhs")); + } + + @Override + public Datatype evaluate(List params) throws TunkkiError { + if (params.size() != 2) { + throw new TunkkiError(TunkkiError.ExceptionType.FunctionArgumentError, -1, getName(), Datatype.toString(params)); + } + + return new BooleanDatatype( + params.get(0).equals(params.get(1)).getData() + ); + } + + @Override + public String getName() { + return "eq"; + } +} diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/GetBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/GetBuiltinFunction.java new file mode 100644 index 0000000..2dd388d --- /dev/null +++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/GetBuiltinFunction.java @@ -0,0 +1,48 @@ +package com.jantuomi.tunkki.core.runtime.builtins.globals; + +import com.jantuomi.tunkki.core.parser.datatype.Datatype; +import com.jantuomi.tunkki.core.parser.datatype.IntegerDatatype; +import com.jantuomi.tunkki.core.parser.datatype.ListDatatype; +import com.jantuomi.tunkki.exception.TunkkiError; + +import java.util.Arrays; +import java.util.List; + +/** + * Created by jan on 28.7.2016. + */ +public class GetBuiltinFunction extends BuiltinFunction { + public GetBuiltinFunction() { + super(Arrays.asList("index")); + } + + @Override + public Datatype evaluate(List params) throws TunkkiError { + if (params.size() != 2) { + throw new TunkkiError(TunkkiError.ExceptionType.FunctionArgumentError, -1, getName(), params.toString()); + } + + if (params.get(0).getType() != Datatype.Type.List) { + throw new TunkkiError(TunkkiError.ExceptionType.FunctionArgumentError, -1, getName(), Datatype.toString(params)); + } + + if (params.get(1).getType() != Datatype.Type.Integer) { + throw new TunkkiError(TunkkiError.ExceptionType.FunctionArgumentError, -1, getName(), Datatype.toString(params)); + } + + ListDatatype list = (ListDatatype) params.get(0); + IntegerDatatype index = (IntegerDatatype) params.get(1); + + try { + return list.getData().get(index.getData()); + } + catch (Exception ex) { + throw new TunkkiError(TunkkiError.ExceptionType.GeneralError, -1, "List index out of bounds."); + } + } + + @Override + public String getName() { + return "get"; + } +} diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/IncludeBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/IncludeBuiltinFunction.java new file mode 100644 index 0000000..c3965e5 --- /dev/null +++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/IncludeBuiltinFunction.java @@ -0,0 +1,58 @@ +package com.jantuomi.tunkki.core.runtime.builtins.globals; + + +import com.jantuomi.tunkki.Tunkki; +import com.jantuomi.tunkki.core.CommandLineArgumentContainer; +import com.jantuomi.tunkki.core.parser.datatype.Datatype; +import com.jantuomi.tunkki.core.parser.datatype.StringDatatype; +import com.jantuomi.tunkki.core.parser.datatype.VoidDatatype; +import com.jantuomi.tunkki.exception.ExceptionManager; +import com.jantuomi.tunkki.exception.TunkkiError; + +import java.util.Arrays; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Created by jan on 28.6.2016. + */ +public class IncludeBuiltinFunction extends BuiltinFunction { + + public IncludeBuiltinFunction() { + super(Arrays.asList("filename")); + } + + @Override + public Datatype evaluate(List params) throws TunkkiError { + String filename; + if (params.size() == 1 && params.get(0).getType() == Datatype.Type.String) { + filename = ((StringDatatype) params.get(0)).getData(); + } else { + ExceptionManager.raise(TunkkiError.ExceptionType.GeneralError, -1, "Include argument must be a valid file name string."); + return null; + } + + String contents = CommandLineArgumentContainer.getInstance().readFileContents(filename); + + if (contents == null) { + return null; + } + + String regex = String.format(".*include\\?\\s+\"\\s?%s\\s?\"\\s?\\!.*", Pattern.quote(filename)); + Pattern pattern = Pattern.compile(regex, Pattern.DOTALL); + Matcher matcher = pattern.matcher(contents); + if (matcher.matches()) { + ExceptionManager.raise(TunkkiError.ExceptionType.GeneralError, -1, "Recursive include detected, aborting."); + return null; + } + + Tunkki.getInstance().run(contents); + return new VoidDatatype(); + } + + @Override + public String getName() { + return "include"; + } +} 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 new file mode 100644 index 0000000..40ce3ab --- /dev/null +++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/InputBuiltinFunction.java @@ -0,0 +1,36 @@ +package com.jantuomi.tunkki.core.runtime.builtins.globals; + +import com.jantuomi.tunkki.core.parser.datatype.Datatype; +import com.jantuomi.tunkki.core.parser.datatype.StringDatatype; +import com.jantuomi.tunkki.exception.TunkkiError; + +import java.util.Arrays; +import java.util.List; +import java.util.Scanner; + +/** + * Created by jan on 21.6.2016. + */ +public class InputBuiltinFunction extends BuiltinFunction { + public InputBuiltinFunction() { + super( + Arrays.asList("expression") + ); + } + + @Override + public String getName() { + return "input"; + } + + @Override + public Datatype evaluate(List params) throws TunkkiError { + if (params.size() > 0) { + Datatype param = params.get(0); + System.out.print(param.getData().toString()); + } + Scanner in = new Scanner(System.in); + String userInput = in.nextLine(); + return new StringDatatype(userInput); + } +} diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ListBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ListBuiltinFunction.java new file mode 100644 index 0000000..3743bbd --- /dev/null +++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ListBuiltinFunction.java @@ -0,0 +1,28 @@ +package com.jantuomi.tunkki.core.runtime.builtins.globals; + +import com.jantuomi.tunkki.core.parser.datatype.Datatype; +import com.jantuomi.tunkki.core.parser.datatype.ListDatatype; +import com.jantuomi.tunkki.exception.TunkkiError; + +import java.util.Arrays; +import java.util.List; + +/** + * Created by jan on 27.7.2016. + */ +public class ListBuiltinFunction extends BuiltinFunction { + public ListBuiltinFunction() { + super(Arrays.asList("elements")); + } + + @Override + public Datatype evaluate(List params) throws TunkkiError { + ListDatatype data = new ListDatatype(params); + return data; + } + + @Override + public String getName() { + return "list"; + } +} 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 new file mode 100644 index 0000000..e3b1e15 --- /dev/null +++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/OutputBuiltinFunction.java @@ -0,0 +1,31 @@ +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.TunkkiError; + +import java.util.Arrays; +import java.util.List; + +/** + * Created by jan on 21.6.2016. + */ +public class OutputBuiltinFunction extends BuiltinFunction { + public OutputBuiltinFunction() { + super( + Arrays.asList("expression") + ); + } + + @Override + public String getName() { + return "output"; + } + + @Override + public Datatype evaluate(List params) throws TunkkiError { + Datatype param = params.get(0); + System.out.println(param.getData().toString()); + return new VoidDatatype(); + } +} -- cgit v1.3