import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class Util
{
// ~~~~ INLINE FUNCTIONS START ~~~~
public static List<Node> CreateInlineFunctions(Parser parser)
{
List<Node> inlineFunctions = new LinkedList<Node>();
inlineFunctions.add(CreatePrintFunction(parser));
inlineFunctions.add(CreatePrintlnFunction(parser));
inlineFunctions.add(CreateWaitFunction(parser));
inlineFunctions.add(CreateArraySizeFunction(parser));
inlineFunctions.add(CreateStrLenFunction(parser));
inlineFunctions.add(CreateStrConcatFunction(parser));
inlineFunctions.add(CreateReadlnFunction(parser));
inlineFunctions.add(CreateSplitFunction(parser));
inlineFunctions.add(CreateDBInsertQueryFunction(parser));
inlineFunctions.add(CreateDBSelectQueryFunction(parser));
return inlineFunctions;
}
public static Node CreateWaitFunction(Parser parser)
{
String functionName = "wait";
List<Parameter> parameters = new ArrayList();
parameters.add(new Parameter("interval"));
List<Node> statements = new LinkedList<Node>();
statements.add(new WaitCommand(parser));
Node functionBody = new BlockNode(statements);
Function function = new Function(functionName, functionBody, parameters);
Node functionVariable = new AssignmentNode(functionName, function, parser);
return functionVariable;
}
public static Node CreatePrintFunction(Parser parser)
{
String functionName = "print";
List<Parameter> parameters = new ArrayList();
parameters.add(new Parameter("writee"));
List<Node> statements = new LinkedList<Node>();
statements.add(new PrintCommand(parser));
Node functionBody = new BlockNode(statements);
Function function = new Function(functionName, functionBody, parameters);
Node functionVariable = new AssignmentNode(functionName, function, parser);
return functionVariable;
}
public static Node CreatePrintlnFunction(Parser parser)
{
String functionName = "println";
List<Parameter> parameters = new ArrayList();
parameters.add(new Parameter("writee"));
List<Node> statements = new LinkedList<Node>();
statements.add(new PrintlnCommand(parser));
Node functionBody = new BlockNode(statements);
Function function = new Function(functionName, functionBody, parameters);
Node functionVariable = new AssignmentNode(functionName, function, parser);
return functionVariable;
}
public static Node CreateArraySizeFunction(Parser parser)
{
String functionName = "arraySize";
List<Parameter> parameters = new ArrayList();
parameters.add(new Parameter("array"));
List<Node> statements = new LinkedList<Node>();
statements.add(new ArraySizeCommand(parser));
Node functionBody = new BlockNode(statements);
Function function = new Function(functionName, functionBody, parameters);
Node functionVariable = new AssignmentNode(functionName, function, parser);
return functionVariable;
}
public static Node CreateStrLenFunction(Parser parser)
{
String functionName = "strLen";
List<Parameter> parameters = new ArrayList();
parameters.add(new Parameter("str"));
List<Node> statements = new LinkedList<Node>();
statements.add(new StrLenCommand(parser));
Node functionBody = new BlockNode(statements);
Function function = new Function(functionName, functionBody, parameters);
Node functionVariable = new AssignmentNode(functionName, function, parser);
return functionVariable;
}
public static Node CreateStrConcatFunction(Parser parser)
{
String functionName = "strConcat";
List<Parameter> parameters = new ArrayList();
parameters.add(new Parameter("str1"));
parameters.add(new Parameter("str2"));
List<Node> statements = new LinkedList<Node>();
statements.add(new StrConcatCommand(parser));
Node functionBody = new BlockNode(statements);
Function function = new Function(functionName, functionBody, parameters);
Node functionVariable = new AssignmentNode(functionName, function, parser);
return functionVariable;
}
public static Node CreateReadlnFunction(Parser parser)
{
String functionName = "readln";
List<Parameter> parameters = new ArrayList();
List<Node> statements = new LinkedList<Node>();
statements.add(new ReadlnCommand(parser));
Node functionBody = new BlockNode(statements);
Function function = new Function(functionName, functionBody, parameters);
Node functionVariable = new AssignmentNode(functionName, function, parser);
return functionVariable;
}
public static Node CreateSplitFunction(Parser parser)
{
String functionName = "split";
List<Parameter> parameters = new ArrayList();
parameters.add(new Parameter("string"));
parameters.add(new Parameter("regex"));
List<Node> statements = new LinkedList<Node>();
statements.add(new SplitCommand(parser));
Node functionBody = new BlockNode(statements);
Function function = new Function(functionName, functionBody, parameters);
Node functionVariable = new AssignmentNode(functionName, function, parser);
return functionVariable;
}
public static Node CreateDBInsertQueryFunction(Parser parser)
{
String functionName = "dbInsertQuery";
List<Parameter> parameters = new ArrayList();
parameters.add(new Parameter("dbInfo"));
parameters.add(new Parameter("query"));
parameters.add(new Parameter("queryParams"));
List<Node> statements = new LinkedList<Node>();
statements.add(new DBInsertQueryCommand(parser));
Node functionBody = new BlockNode(statements);
Function function = new Function(functionName, functionBody, parameters);
Node functionVariable = new AssignmentNode(functionName, function, parser);
return functionVariable;
}
public static Node CreateDBSelectQueryFunction(Parser parser)
{
String functionName = "dbSelectQuery";
List<Parameter> parameters = new ArrayList();
parameters.add(new Parameter("dbInfo"));
parameters.add(new Parameter("query"));
List<Node> statements = new LinkedList<Node>();
statements.add(new DBSelectQueryCommand(parser));
Node functionBody = new BlockNode(statements);
Function function = new Function(functionName, functionBody, parameters);
Node functionVariable = new AssignmentNode(functionName, function, parser);
return functionVariable;
}
// ~~~~ INLINE FUNCTIONS END ~~~~
// ~~~~ UTILITY METHODS START ~~~~
public static void Write(Object obj)
{
System.out.print(obj);
}
public static void Writeln(Object obj)
{
System.out.println(obj);
}
public static void Writeln()
{
System.out.println();
}
public static void PrettyPrint(List<Token> tokens)
{
int numberCount = 0;
int opCount = 0;
for (Token token: tokens)
{
if (token.type == TokenType.NUMBER)
{
Writeln("Number....: " + token.text);
numberCount++;
}
else
{
Writeln("Operator..: " + token.type);
opCount++;
}
}
Writeln("You have got "+
numberCount +
" different number and " +
opCount
+" operators.");
}
// ~~~~ UTILITY METHODS END ~~~~
}