public void FunctionReturnTests() { VariableEnvironment variables = new VariableEnvironment(); FunctionEnvironment functionEnvironment = new FunctionEnvironment(); variables.DeclareVariable("abc", BogieLangType.BOOL); variables.DefineVariable("abc", true); string txt = "return abc"; AntlrInputStream inputStream = new AntlrInputStream(txt); BogieLangLexer lexer = new BogieLangLexer(inputStream); CommonTokenStream commonTokenStream = new CommonTokenStream(lexer); BogieLangParser parser = new BogieLangParser(commonTokenStream); BogieLangParser.FunctionReturnContext functionReturnContext = parser.functionReturn(); BogieLangBaseVisitor <object> visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(functionReturnContext); FunctionReturn functionReturn = FunctionReturn.Compile(functionReturnContext); Assert.True((bool)functionReturn.Execute(functionEnvironment, variables) == true); variables.Clear(); txt = "return 10.0"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); functionReturnContext = parser.functionReturn(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(functionReturnContext); functionReturn = FunctionReturn.Compile(functionReturnContext); Assert.True((double)functionReturn.Execute(functionEnvironment, variables) == 10.0); }
public void VarDefinitionTests() { string txt = "var=123"; AntlrInputStream inputStream = new AntlrInputStream(txt); BogieLangLexer lexer = new BogieLangLexer(inputStream); CommonTokenStream commonTokenStream = new CommonTokenStream(lexer); BogieLangParser parser = new BogieLangParser(commonTokenStream); BogieLangParser.VarDefinitionContext varDefinitionContext = parser.varDefinition(); BogieLangBaseVisitor <object> visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(varDefinitionContext); VarDefinition varDefinition = VarDefinition.Compile(varDefinitionContext); Assert.True(varDefinition.Identifier == "var"); Assert.True(varDefinition.Expression.Literal.Integer == 123); txt = "var=funcCall(\"arg\")"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); varDefinitionContext = parser.varDefinition(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(varDefinitionContext); varDefinition = VarDefinition.Compile(varDefinitionContext); Assert.True(varDefinition.Identifier == "var"); Assert.True(varDefinition.Expression.FunctionCall.Identifier == "funcCall"); }
public void FunctionReturnTests() { string txt = "return abc"; AntlrInputStream inputStream = new AntlrInputStream(txt); BogieLangLexer lexer = new BogieLangLexer(inputStream); CommonTokenStream commonTokenStream = new CommonTokenStream(lexer); BogieLangParser parser = new BogieLangParser(commonTokenStream); BogieLangParser.FunctionReturnContext functionReturnContext = parser.functionReturn(); BogieLangBaseVisitor <object> visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(functionReturnContext); FunctionReturn functionReturn = FunctionReturn.Compile(functionReturnContext); Assert.True(functionReturn.Expression.Identifier == "abc"); txt = "return 10.0"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); functionReturnContext = parser.functionReturn(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(functionReturnContext); functionReturn = FunctionReturn.Compile(functionReturnContext); Assert.True(functionReturn.Expression.Literal.Real == 10.0); }
public void IfTests() { VariableEnvironment variables = new VariableEnvironment(); FunctionEnvironment functionEnvironment = new FunctionEnvironment(); string txt = "if(true){}"; AntlrInputStream inputStream = new AntlrInputStream(txt); BogieLangLexer lexer = new BogieLangLexer(inputStream); CommonTokenStream commonTokenStream = new CommonTokenStream(lexer); BogieLangParser parser = new BogieLangParser(commonTokenStream); BogieLangParser.IfControlContext ifControlContext = parser.ifControl(); BogieLangBaseVisitor <object> visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(ifControlContext); IfControl ifControl = IfControl.Compile(ifControlContext); Assert.True(ifControl.Execute(functionEnvironment, variables) == null); txt = "if(true){int b=0}"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); ifControlContext = parser.ifControl(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(ifControlContext); ifControl = IfControl.Compile(ifControlContext); Assert.True(ifControl.Execute(functionEnvironment, variables) == null); Assert.True(!variables.IsVariableDeclared("b")); }
public void VarDeclarationTests() { string txt = "int var"; AntlrInputStream inputStream = new AntlrInputStream(txt); BogieLangLexer lexer = new BogieLangLexer(inputStream); lexer.AddErrorListener(new ParserErrorHandler <int>()); CommonTokenStream commonTokenStream = new CommonTokenStream(lexer); BogieLangParser parser = new BogieLangParser(commonTokenStream); parser.AddErrorListener(new ParserErrorHandler <object>()); BogieLangParser.VarDeclarationContext VarDeclarationContext = parser.varDeclaration(); BogieLangBaseVisitor <object> visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(VarDeclarationContext); Assert.True(parser.NumberOfSyntaxErrors == 0); txt = "int var=123"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); lexer.AddErrorListener(new ParserErrorHandler <int>()); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); parser.AddErrorListener(new ParserErrorHandler <object>()); VarDeclarationContext = parser.varDeclaration(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(VarDeclarationContext); Assert.True(parser.NumberOfSyntaxErrors == 0); txt = "int var=funcCall()"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); lexer.AddErrorListener(new ParserErrorHandler <int>()); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); parser.AddErrorListener(new ParserErrorHandler <object>()); VarDeclarationContext = parser.varDeclaration(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(VarDeclarationContext); Assert.True(parser.NumberOfSyntaxErrors == 0); txt = " \t \nint \t \nvar \t \n= \t \nfuncCall() \t \n"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); lexer.AddErrorListener(new ParserErrorHandler <int>()); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); parser.AddErrorListener(new ParserErrorHandler <object>()); VarDeclarationContext = parser.varDeclaration(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(VarDeclarationContext); Assert.True(parser.NumberOfSyntaxErrors == 0); }
public void LiteralTests() { string txt = "1"; AntlrInputStream inputStream = new AntlrInputStream(txt); BogieLangLexer lexer = new BogieLangLexer(inputStream); lexer.AddErrorListener(new ParserErrorHandler <int>()); CommonTokenStream commonTokenStream = new CommonTokenStream(lexer); BogieLangParser parser = new BogieLangParser(commonTokenStream); parser.AddErrorListener(new ParserErrorHandler <object>()); BogieLangParser.LiteralContext literalContext = parser.literal(); BogieLangBaseVisitor <object> visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(literalContext); Assert.True(parser.NumberOfSyntaxErrors == 0); txt = "1.0"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); lexer.AddErrorListener(new ParserErrorHandler <int>()); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); parser.AddErrorListener(new ParserErrorHandler <object>()); literalContext = parser.literal(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(literalContext); Assert.True(parser.NumberOfSyntaxErrors == 0); txt = "false"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); lexer.AddErrorListener(new ParserErrorHandler <int>()); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); parser.AddErrorListener(new ParserErrorHandler <object>()); literalContext = parser.literal(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(literalContext); Assert.True(parser.NumberOfSyntaxErrors == 0); txt = "\"asd8 99asd\""; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); lexer.AddErrorListener(new ParserErrorHandler <int>()); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); parser.AddErrorListener(new ParserErrorHandler <object>()); literalContext = parser.literal(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(literalContext); Assert.True(parser.NumberOfSyntaxErrors == 0); }
public void ProgramTests() { string txt = "void funcName(){}"; AntlrInputStream inputStream = new AntlrInputStream(txt); BogieLangLexer lexer = new BogieLangLexer(inputStream); lexer.AddErrorListener(new ParserErrorHandler <int>()); CommonTokenStream commonTokenStream = new CommonTokenStream(lexer); BogieLangParser parser = new BogieLangParser(commonTokenStream); parser.AddErrorListener(new ParserErrorHandler <object>()); BogieLangParser.ProgramContext ProgramContext = parser.program(); BogieLangBaseVisitor <object> visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(ProgramContext); Assert.True(parser.NumberOfSyntaxErrors == 0); txt = "void funcName(int abc,string str,void lol){}"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); lexer.AddErrorListener(new ParserErrorHandler <int>()); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); parser.AddErrorListener(new ParserErrorHandler <object>()); ProgramContext = parser.program(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(ProgramContext); Assert.True(parser.NumberOfSyntaxErrors == 0); txt = "void funcName(){}" + "void funcName(int abc,string str,void lol){}" + "void funcName(int abc,string str,void lol){int intvar" + "\nint intvar=123" + "\nintvar=0.1" + "\nfuncCall(lol)" + "\nreturn funcCall()" + "\n}"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); lexer.AddErrorListener(new ParserErrorHandler <int>()); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); parser.AddErrorListener(new ParserErrorHandler <object>()); ProgramContext = parser.program(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(ProgramContext); Assert.True(parser.NumberOfSyntaxErrors == 0); }
public void WhileTests() { string txt = "while(true){}"; AntlrInputStream inputStream = new AntlrInputStream(txt); BogieLangLexer lexer = new BogieLangLexer(inputStream); lexer.AddErrorListener(new ParserErrorHandler <int>()); CommonTokenStream commonTokenStream = new CommonTokenStream(lexer); BogieLangParser parser = new BogieLangParser(commonTokenStream); parser.AddErrorListener(new ParserErrorHandler <object>()); BogieLangParser.WhileControlContext WhileControlContext = parser.whileControl(); BogieLangBaseVisitor <object> visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(WhileControlContext); Assert.True(parser.NumberOfSyntaxErrors == 0); txt = "while(true){int b=0}"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); lexer.AddErrorListener(new ParserErrorHandler <int>()); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); parser.AddErrorListener(new ParserErrorHandler <object>()); WhileControlContext = parser.whileControl(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(WhileControlContext); Assert.True(parser.NumberOfSyntaxErrors == 0); txt = @"while(true) { int b=0 b = 1 funcCall(b) while(false){return 1} return 0 }"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); lexer.AddErrorListener(new ParserErrorHandler <int>()); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); parser.AddErrorListener(new ParserErrorHandler <object>()); WhileControlContext = parser.whileControl(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(WhileControlContext); Assert.True(parser.NumberOfSyntaxErrors == 0); }
public void ProgramTests() { string txt = @" bool Main() { return func(true) } bool func(bool b) { if(b){return false} return true }"; AntlrInputStream inputStream = new AntlrInputStream(txt); BogieLangLexer lexer = new BogieLangLexer(inputStream); CommonTokenStream commonTokenStream = new CommonTokenStream(lexer); BogieLangParser parser = new BogieLangParser(commonTokenStream); BogieLangParser.ProgramContext programContext = parser.program(); BogieLangBaseVisitor <object> visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(programContext); Program program = Program.Compile(programContext); Assert.True((bool)program.Execute() == false); txt = @" int Main() { return fibonacci(8) } int fibonacci(int n) { if(n==0){return 0} if(n==1){return 1} return fibonacci(n-2)+fibonacci(n-1) }"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); programContext = parser.program(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(programContext); program = Program.Compile(programContext); Assert.True((int)program.Execute() == 21); }
public void FunctionCallTests() { string txt = "funcCall()"; AntlrInputStream inputStream = new AntlrInputStream(txt); BogieLangLexer lexer = new BogieLangLexer(inputStream); CommonTokenStream commonTokenStream = new CommonTokenStream(lexer); BogieLangParser parser = new BogieLangParser(commonTokenStream); BogieLangParser.FunctionCallContext functionCallContext = parser.functionCall(); BogieLangBaseVisitor <object> visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(functionCallContext); FunctionCall functionCall = FunctionCall.Compile(functionCallContext); Assert.True(functionCall.Identifier == "funcCall"); Assert.True(functionCall.Arguments.Count == 0); txt = "funcCall(\"arg\")"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); lexer.AddErrorListener(new ParserErrorHandler <int>()); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); parser.AddErrorListener(new ParserErrorHandler <object>()); functionCallContext = parser.functionCall(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(functionCallContext); functionCall = FunctionCall.Compile(functionCallContext); Assert.True(functionCall.Identifier == "funcCall"); Assert.True(functionCall.Arguments[0].Literal.String == "arg"); txt = "funcCall(10.0,funcCall2())"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); lexer.AddErrorListener(new ParserErrorHandler <int>()); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); parser.AddErrorListener(new ParserErrorHandler <object>()); functionCallContext = parser.functionCall(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(functionCallContext); functionCall = FunctionCall.Compile(functionCallContext); Assert.True(functionCall.Identifier == "funcCall"); Assert.True(functionCall.Arguments[0].Literal.Real == 10.0); Assert.True(functionCall.Arguments[1].FunctionCall.Identifier == "funcCall2"); }
public void FunctionReturnTests() { string txt = "return abc"; AntlrInputStream inputStream = new AntlrInputStream(txt); BogieLangLexer lexer = new BogieLangLexer(inputStream); lexer.AddErrorListener(new ParserErrorHandler <int>()); CommonTokenStream commonTokenStream = new CommonTokenStream(lexer); BogieLangParser parser = new BogieLangParser(commonTokenStream); parser.AddErrorListener(new ParserErrorHandler <object>()); BogieLangParser.FunctionReturnContext FunctionReturnContext = parser.functionReturn(); BogieLangBaseVisitor <object> visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(FunctionReturnContext); Assert.True(parser.NumberOfSyntaxErrors == 0); txt = "return 10.0"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); lexer.AddErrorListener(new ParserErrorHandler <int>()); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); parser.AddErrorListener(new ParserErrorHandler <object>()); FunctionReturnContext = parser.functionReturn(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(FunctionReturnContext); Assert.True(parser.NumberOfSyntaxErrors == 0); txt = " \t \nreturn \t \nabc \t \n"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); lexer.AddErrorListener(new ParserErrorHandler <int>()); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); parser.AddErrorListener(new ParserErrorHandler <object>()); FunctionReturnContext = parser.functionReturn(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(FunctionReturnContext); Assert.True(parser.NumberOfSyntaxErrors == 0); }
public void WhileTests() { VariableEnvironment variables = new VariableEnvironment(); FunctionEnvironment functionEnvironment = new FunctionEnvironment(); variables.DeclareVariable("loop", BogieLangType.BOOL); variables.DefineVariable("loop", true); string txt = "while(loop){loop = false}"; AntlrInputStream inputStream = new AntlrInputStream(txt); BogieLangLexer lexer = new BogieLangLexer(inputStream); CommonTokenStream commonTokenStream = new CommonTokenStream(lexer); BogieLangParser parser = new BogieLangParser(commonTokenStream); BogieLangParser.WhileControlContext whileControlContext = parser.whileControl(); BogieLangBaseVisitor <object> visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(whileControlContext); WhileControl whileControl = WhileControl.Compile(whileControlContext); Assert.True(whileControl.Execute(functionEnvironment, variables) == null); Assert.True((bool)variables["loop"].Value == false); txt = " while(loop){loop = false int b=0}"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); whileControlContext = parser.whileControl(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(whileControlContext); whileControl = WhileControl.Compile(whileControlContext); Assert.True(whileControl.Execute(functionEnvironment, variables) == null); Assert.True((bool)variables["loop"].Value == false); Assert.True(!variables.IsVariableDeclared("b")); }
public void VarDefinitionTests() { VariableEnvironment variables = new VariableEnvironment(); FunctionEnvironment functionEnvironment = new FunctionEnvironment(); variables.DeclareVariable("var", BogieLangType.INTEGER); string txt = "var=123"; AntlrInputStream inputStream = new AntlrInputStream(txt); BogieLangLexer lexer = new BogieLangLexer(inputStream); CommonTokenStream commonTokenStream = new CommonTokenStream(lexer); BogieLangParser parser = new BogieLangParser(commonTokenStream); BogieLangParser.VarDefinitionContext varDefinitionContext = parser.varDefinition(); BogieLangBaseVisitor <object> visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(varDefinitionContext); VarDefinition varDefinition = VarDefinition.Compile(varDefinitionContext); varDefinition.Execute(functionEnvironment, variables); Assert.True(variables["var"].BogieLangType == BogieLangType.INTEGER); Assert.True(variables["var"].Value is int); Assert.True((int)variables["var"].Value == 123); }
public void ExpressionTests() { string txt = "1"; AntlrInputStream inputStream = new AntlrInputStream(txt); BogieLangLexer lexer = new BogieLangLexer(inputStream); CommonTokenStream commonTokenStream = new CommonTokenStream(lexer); BogieLangParser parser = new BogieLangParser(commonTokenStream); BogieLangParser.ExpressionContext expressionContext = parser.expression(); BogieLangBaseVisitor <object> visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(expressionContext); Expression expression = Expression.Compile(expressionContext, null); Assert.True(expression.Identifier == null); Assert.True(expression.Literal.Integer == 1); Assert.True(expression.FunctionCall == null); Assert.True(expression.Operator == null); Assert.True(expression.SubExpression == null); Assert.True(expression.ParentExpression == null); txt = "1.0"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); expressionContext = parser.expression(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(expressionContext); expression = Expression.Compile(expressionContext, null); Assert.True(expression.Identifier == null); Assert.True(expression.Literal.Real == 1.0); Assert.True(expression.FunctionCall == null); Assert.True(expression.Operator == null); Assert.True(expression.SubExpression == null); Assert.True(expression.ParentExpression == null); txt = "false"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); expressionContext = parser.expression(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(expressionContext); expression = Expression.Compile(expressionContext, null); Assert.True(expression.Identifier == null); Assert.True(expression.Literal.Bool == false); Assert.True(expression.FunctionCall == null); Assert.True(expression.Operator == null); Assert.True(expression.SubExpression == null); Assert.True(expression.ParentExpression == null); txt = "\"asd899asd\""; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); expressionContext = parser.expression(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(expressionContext); expression = Expression.Compile(expressionContext, null); Assert.True(expression.Identifier == null); Assert.True(expression.Literal.String == "asd899asd"); Assert.True(expression.FunctionCall == null); Assert.True(expression.Operator == null); Assert.True(expression.SubExpression == null); Assert.True(expression.ParentExpression == null); txt = "VarName"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); expressionContext = parser.expression(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(expressionContext); expression = Expression.Compile(expressionContext, null); Assert.True(expression.Identifier == "VarName"); Assert.True(expression.Literal == null); Assert.True(expression.FunctionCall == null); Assert.True(expression.Operator == null); Assert.True(expression.SubExpression == null); Assert.True(expression.ParentExpression == null); txt = "VarName + 1+ true*0"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); expressionContext = parser.expression(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(expressionContext); expression = Expression.Compile(expressionContext, null); Assert.True(expression.Identifier == "VarName"); Assert.True(expression.Literal == null); Assert.True(expression.FunctionCall == null); Assert.True(expression.Operator == "+"); Assert.True(expression.SubExpression.Literal.Integer == 1); Assert.True(expression.SubExpression.Operator == "+"); Assert.True(expression.SubExpression.SubExpression.Literal.Bool == true); Assert.True(expression.SubExpression.SubExpression.Operator == "*"); Assert.True(expression.SubExpression.SubExpression.SubExpression.Literal.Integer == 0); Assert.True(expression.ParentExpression == null); Assert.True(expression.SubExpression.ParentExpression == expression); Assert.True(expression.SubExpression.SubExpression.ParentExpression == expression.SubExpression); Assert.True(expression.SubExpression.SubExpression.SubExpression.ParentExpression == expression.SubExpression.SubExpression); txt = "funcCall()"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); expressionContext = parser.expression(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(expressionContext); expression = Expression.Compile(expressionContext, null); Assert.True(expression.Identifier == null); Assert.True(expression.Literal == null); Assert.True(expression.FunctionCall.Identifier == "funcCall"); Assert.True(expression.Operator == null); Assert.True(expression.SubExpression == null); Assert.True(expression.ParentExpression == null); }
public void ProgramTests() { string txt = "void Main(){}"; AntlrInputStream inputStream = new AntlrInputStream(txt); BogieLangLexer lexer = new BogieLangLexer(inputStream); CommonTokenStream commonTokenStream = new CommonTokenStream(lexer); BogieLangParser parser = new BogieLangParser(commonTokenStream); BogieLangParser.ProgramContext programContext = parser.program(); BogieLangBaseVisitor <object> visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(programContext); Program program = Program.Compile(programContext); Assert.True(program.FunctionEnvironment.IsFunctionDefined("Main")); Assert.True(program.FunctionEnvironment["Main"].ReturnBogieLangType == BogieLangType.VOID); Assert.True(program.FunctionEnvironment["Main"].Parameters.Count == 0); txt = "void Main(int abc,string str,void lol){}"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); programContext = parser.program(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(programContext); program = Program.Compile(programContext); Assert.True(program.FunctionEnvironment.IsFunctionDefined("Main")); Assert.True(program.FunctionEnvironment["Main"].ReturnBogieLangType == BogieLangType.VOID); Assert.True(program.FunctionEnvironment["Main"].Parameters[0].Item1 == BogieLangType.INTEGER); Assert.True(program.FunctionEnvironment["Main"].Parameters[0].Item2 == "abc"); Assert.True(program.FunctionEnvironment["Main"].Parameters[1].Item1 == BogieLangType.STRING); Assert.True(program.FunctionEnvironment["Main"].Parameters[1].Item2 == "str"); Assert.True(program.FunctionEnvironment["Main"].Parameters[2].Item1 == BogieLangType.VOID); Assert.True(program.FunctionEnvironment["Main"].Parameters[2].Item2 == "lol"); Assert.True(program.FunctionEnvironment["Main"].Body.Count == 0); txt = "void Main(){}" + "void funcName1(int abc,string str,void lol){}" + "void funcName2(int abc,string str,void lol){int intvar" + "\nint intvar=123" + "\nintvar=0.1" + "\nfuncCall(lol)" + "\nreturn funcCall()" + "\n}"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); programContext = parser.program(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(programContext); program = Program.Compile(programContext); Assert.True(program.FunctionEnvironment.IsFunctionDefined("Main")); Assert.True(program.FunctionEnvironment["Main"].ReturnBogieLangType == BogieLangType.VOID); Assert.True(program.FunctionEnvironment["Main"].Parameters.Count == 0); Assert.True(program.FunctionEnvironment.IsFunctionDefined("funcName1")); Assert.True(program.FunctionEnvironment["funcName1"].ReturnBogieLangType == BogieLangType.VOID); Assert.True(program.FunctionEnvironment["funcName1"].Parameters[0].Item1 == BogieLangType.INTEGER); Assert.True(program.FunctionEnvironment["funcName1"].Parameters[0].Item2 == "abc"); Assert.True(program.FunctionEnvironment["funcName1"].Parameters[1].Item1 == BogieLangType.STRING); Assert.True(program.FunctionEnvironment["funcName1"].Parameters[1].Item2 == "str"); Assert.True(program.FunctionEnvironment["funcName1"].Parameters[2].Item1 == BogieLangType.VOID); Assert.True(program.FunctionEnvironment["funcName1"].Parameters[2].Item2 == "lol"); Assert.True(program.FunctionEnvironment["funcName1"].Body.Count == 0); Assert.True(program.FunctionEnvironment.IsFunctionDefined("funcName2")); Assert.True(program.FunctionEnvironment["funcName2"].ReturnBogieLangType == BogieLangType.VOID); Assert.True(program.FunctionEnvironment["funcName2"].Parameters[0].Item1 == BogieLangType.INTEGER); Assert.True(program.FunctionEnvironment["funcName2"].Parameters[0].Item2 == "abc"); Assert.True(program.FunctionEnvironment["funcName2"].Parameters[1].Item1 == BogieLangType.STRING); Assert.True(program.FunctionEnvironment["funcName2"].Parameters[1].Item2 == "str"); Assert.True(program.FunctionEnvironment["funcName2"].Parameters[2].Item1 == BogieLangType.VOID); Assert.True(program.FunctionEnvironment["funcName2"].Parameters[2].Item2 == "lol"); Assert.True(program.FunctionEnvironment["funcName2"].Body[0].VarDeclaration.BogieLangType == BogieLangType.INTEGER); Assert.True(program.FunctionEnvironment["funcName2"].Body[0].VarDeclaration.Identifier == "intvar"); Assert.True(program.FunctionEnvironment["funcName2"].Body[1].VarDeclaration.BogieLangType == BogieLangType.INTEGER); Assert.True(program.FunctionEnvironment["funcName2"].Body[1].VarDeclaration.Identifier == "intvar"); Assert.True(program.FunctionEnvironment["funcName2"].Body[1].VarDeclaration.Expression.Literal.Integer == 123); Assert.True(program.FunctionEnvironment["funcName2"].Body[2].VarDefinition.Identifier == "intvar"); Assert.True(program.FunctionEnvironment["funcName2"].Body[2].VarDefinition.Expression.Literal.Real == 0.1); Assert.True(program.FunctionEnvironment["funcName2"].Body[3].FunctionCall.Identifier == "funcCall"); Assert.True(program.FunctionEnvironment["funcName2"].Body[3].FunctionCall.Arguments[0].Identifier == "lol"); Assert.True(program.FunctionEnvironment["funcName2"].Body[4].FunctionReturn.Expression.FunctionCall.Identifier == "funcCall"); }
public void FunctionDefinitionTests() { string txt = "void funcName(){}"; AntlrInputStream inputStream = new AntlrInputStream(txt); BogieLangLexer lexer = new BogieLangLexer(inputStream); CommonTokenStream commonTokenStream = new CommonTokenStream(lexer); BogieLangParser parser = new BogieLangParser(commonTokenStream); BogieLangParser.FunctionDefinitionContext functionDefinitionContext = parser.functionDefinition(); BogieLangBaseVisitor <object> visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(functionDefinitionContext); FunctionDefinition functionDefinition = FunctionDefinition.Compile(functionDefinitionContext); Assert.True(functionDefinition.Identifier == "funcName"); Assert.True(functionDefinition.ReturnBogieLangType == BogieLangType.VOID); Assert.True(functionDefinition.Parameters.Count == 0); Assert.True(functionDefinition.Body.Count == 0); txt = "void funcName(int abc,string str,void lol){}"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); functionDefinitionContext = parser.functionDefinition(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(functionDefinitionContext); functionDefinition = FunctionDefinition.Compile(functionDefinitionContext); Assert.True(functionDefinition.Identifier == "funcName"); Assert.True(functionDefinition.ReturnBogieLangType == BogieLangType.VOID); Assert.True(functionDefinition.Parameters[0].Item1 == BogieLangType.INTEGER); Assert.True(functionDefinition.Parameters[0].Item2 == "abc"); Assert.True(functionDefinition.Parameters[1].Item1 == BogieLangType.STRING); Assert.True(functionDefinition.Parameters[1].Item2 == "str"); Assert.True(functionDefinition.Parameters[2].Item1 == BogieLangType.VOID); Assert.True(functionDefinition.Parameters[2].Item2 == "lol"); Assert.True(functionDefinition.Body.Count == 0); txt = "void funcName(int abc,string str,void lol){int intvar" + "\nint intvar=123" + "\nintvar=0.1" + "\nfuncCall(lol)" + "\nreturn funcCall()" + "\n}"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); functionDefinitionContext = parser.functionDefinition(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(functionDefinitionContext); functionDefinition = FunctionDefinition.Compile(functionDefinitionContext); Assert.True(functionDefinition.Identifier == "funcName"); Assert.True(functionDefinition.ReturnBogieLangType == BogieLangType.VOID); Assert.True(functionDefinition.Parameters[0].Item1 == BogieLangType.INTEGER); Assert.True(functionDefinition.Parameters[0].Item2 == "abc"); Assert.True(functionDefinition.Parameters[1].Item1 == BogieLangType.STRING); Assert.True(functionDefinition.Parameters[1].Item2 == "str"); Assert.True(functionDefinition.Parameters[2].Item1 == BogieLangType.VOID); Assert.True(functionDefinition.Parameters[2].Item2 == "lol"); Assert.True(functionDefinition.Body[0].VarDeclaration.BogieLangType == BogieLangType.INTEGER); Assert.True(functionDefinition.Body[0].VarDeclaration.Identifier == "intvar"); Assert.True(functionDefinition.Body[1].VarDeclaration.BogieLangType == BogieLangType.INTEGER); Assert.True(functionDefinition.Body[1].VarDeclaration.Identifier == "intvar"); Assert.True(functionDefinition.Body[1].VarDeclaration.Expression.Literal.Integer == 123); Assert.True(functionDefinition.Body[2].VarDefinition.Identifier == "intvar"); Assert.True(functionDefinition.Body[2].VarDefinition.Expression.Literal.Real == 0.1); Assert.True(functionDefinition.Body[3].FunctionCall.Identifier == "funcCall"); Assert.True(functionDefinition.Body[3].FunctionCall.Arguments[0].Identifier == "lol"); Assert.True(functionDefinition.Body[4].FunctionReturn.Expression.FunctionCall.Identifier == "funcCall"); }
public void WhileTests() { string txt = "while(true){}"; AntlrInputStream inputStream = new AntlrInputStream(txt); BogieLangLexer lexer = new BogieLangLexer(inputStream); CommonTokenStream commonTokenStream = new CommonTokenStream(lexer); BogieLangParser parser = new BogieLangParser(commonTokenStream); BogieLangParser.WhileControlContext whileControlContext = parser.whileControl(); BogieLangBaseVisitor <object> visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(whileControlContext); WhileControl whileControl = WhileControl.Compile(whileControlContext); Assert.True(whileControl.Expression.Literal.Bool == true); Assert.True(whileControl.Body.Count == 0); txt = "while(true){int b=0}"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); whileControlContext = parser.whileControl(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(whileControlContext); whileControl = WhileControl.Compile(whileControlContext); Assert.True(whileControl.Expression.Literal.Bool == true); Assert.True(whileControl.Body[0].VarDeclaration.BogieLangType == BogieLangType.INTEGER); Assert.True(whileControl.Body[0].VarDeclaration.Identifier == "b"); Assert.True(whileControl.Body[0].VarDeclaration.Expression.Literal.Integer == 0); txt = @"while(true) { int b=0 b = 1 funcCall(b) while(false){return 1} return 0 }"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); whileControlContext = parser.whileControl(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(whileControlContext); whileControl = WhileControl.Compile(whileControlContext); Assert.True(whileControl.Expression.Literal.Bool == true); Assert.True(whileControl.Body[0].VarDeclaration.BogieLangType == BogieLangType.INTEGER); Assert.True(whileControl.Body[0].VarDeclaration.Identifier == "b"); Assert.True(whileControl.Body[0].VarDeclaration.Expression.Literal.Integer == 0); Assert.True(whileControl.Body[1].VarDefinition.Identifier == "b"); Assert.True(whileControl.Body[1].VarDefinition.Expression.Literal.Integer == 1); Assert.True(whileControl.Body[2].FunctionCall.Identifier == "funcCall"); Assert.True(whileControl.Body[2].FunctionCall.Arguments[0].Identifier == "b"); Assert.True(whileControl.Body[3].WhileControl.Expression.Literal.Bool == false); Assert.True(whileControl.Body[3].WhileControl.Body[0].FunctionReturn.Expression.Literal.Integer == 1); Assert.True(whileControl.Body[4].FunctionReturn.Expression.Literal.Integer == 0); }
public void BodyTests() { string txt = "int b=true"; AntlrInputStream inputStream = new AntlrInputStream(txt); BogieLangLexer lexer = new BogieLangLexer(inputStream); CommonTokenStream commonTokenStream = new CommonTokenStream(lexer); BogieLangParser parser = new BogieLangParser(commonTokenStream); BogieLangParser.BodyContext bodyContext = parser.body(); BogieLangBaseVisitor <object> visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(bodyContext); Body body = Body.Compile(bodyContext); Assert.True(body.VarDeclaration.BogieLangType == BogieLangType.INTEGER); Assert.True(body.VarDeclaration.Identifier == "b"); Assert.True(body.VarDeclaration.Expression.Literal.Bool == true); txt = "abc=123"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); bodyContext = parser.body(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(bodyContext); body = Body.Compile(bodyContext); Assert.True(body.VarDefinition.Identifier == "abc"); Assert.True(body.VarDefinition.Expression.Literal.Integer == 123); txt = "func()"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); bodyContext = parser.body(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(bodyContext); body = Body.Compile(bodyContext); Assert.True(body.FunctionCall.Identifier == "func"); txt = "return 0"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); bodyContext = parser.body(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(bodyContext); body = Body.Compile(bodyContext); Assert.True(body.FunctionReturn.Expression.Literal.Integer == 0); txt = "if(1){int b}"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); bodyContext = parser.body(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(bodyContext); body = Body.Compile(bodyContext); Assert.True(body.IfControl.Expression.Literal.Integer == 1); Assert.True(body.IfControl.Body[0].VarDeclaration.BogieLangType == BogieLangType.INTEGER); Assert.True(body.IfControl.Body[0].VarDeclaration.Identifier == "b"); txt = "while(1){int b}"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); bodyContext = parser.body(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(bodyContext); body = Body.Compile(bodyContext); Assert.True(body.WhileControl.Expression.Literal.Integer == 1); Assert.True(body.WhileControl.Body[0].VarDeclaration.BogieLangType == BogieLangType.INTEGER); Assert.True(body.WhileControl.Body[0].VarDeclaration.Identifier == "b"); }
public void BodyTests() { string txt = "int b=true"; AntlrInputStream inputStream = new AntlrInputStream(txt); BogieLangLexer lexer = new BogieLangLexer(inputStream); lexer.AddErrorListener(new ParserErrorHandler <int>()); CommonTokenStream commonTokenStream = new CommonTokenStream(lexer); BogieLangParser parser = new BogieLangParser(commonTokenStream); parser.AddErrorListener(new ParserErrorHandler <object>()); BogieLangParser.BodyContext BodyContext = parser.body(); BogieLangBaseVisitor <object> visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(BodyContext); Assert.True(parser.NumberOfSyntaxErrors == 0); txt = "abc=123"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); lexer.AddErrorListener(new ParserErrorHandler <int>()); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); parser.AddErrorListener(new ParserErrorHandler <object>()); BodyContext = parser.body(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(BodyContext); Assert.True(parser.NumberOfSyntaxErrors == 0); txt = "func()"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); lexer.AddErrorListener(new ParserErrorHandler <int>()); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); parser.AddErrorListener(new ParserErrorHandler <object>()); BodyContext = parser.body(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(BodyContext); Assert.True(parser.NumberOfSyntaxErrors == 0); txt = "return 0"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); lexer.AddErrorListener(new ParserErrorHandler <int>()); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); parser.AddErrorListener(new ParserErrorHandler <object>()); BodyContext = parser.body(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(BodyContext); Assert.True(parser.NumberOfSyntaxErrors == 0); txt = "if(1){int b}"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); lexer.AddErrorListener(new ParserErrorHandler <int>()); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); parser.AddErrorListener(new ParserErrorHandler <object>()); BodyContext = parser.body(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(BodyContext); Assert.True(parser.NumberOfSyntaxErrors == 0); txt = "while(1){int b}"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); lexer.AddErrorListener(new ParserErrorHandler <int>()); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); parser.AddErrorListener(new ParserErrorHandler <object>()); BodyContext = parser.body(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(BodyContext); Assert.True(parser.NumberOfSyntaxErrors == 0); }
public void LiteralTests() { string txt = "1"; AntlrInputStream inputStream = new AntlrInputStream(txt); BogieLangLexer lexer = new BogieLangLexer(inputStream); CommonTokenStream commonTokenStream = new CommonTokenStream(lexer); BogieLangParser parser = new BogieLangParser(commonTokenStream); BogieLangParser.LiteralContext literalContext = parser.literal(); BogieLangBaseVisitor <object> visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(literalContext); Literal literal = Literal.Compile(literalContext); Assert.True(literal.Execute() is int); Assert.True((int)literal.Execute() == 1); txt = "1.0"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); lexer.AddErrorListener(new ParserErrorHandler <int>()); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); parser.AddErrorListener(new ParserErrorHandler <object>()); literalContext = parser.literal(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(literalContext); literal = Literal.Compile(literalContext); Assert.True(literal.Execute() is double); Assert.True((double)literal.Execute() == 1.0); txt = "false"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); lexer.AddErrorListener(new ParserErrorHandler <int>()); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); parser.AddErrorListener(new ParserErrorHandler <object>()); literalContext = parser.literal(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(literalContext); Assert.True(parser.NumberOfSyntaxErrors == 0); literal = Literal.Compile(literalContext); Assert.True(literal.Execute() is bool); Assert.True((bool)literal.Execute() == false); txt = "\"asd8 99asd\""; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); lexer.AddErrorListener(new ParserErrorHandler <int>()); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); parser.AddErrorListener(new ParserErrorHandler <object>()); literalContext = parser.literal(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(literalContext); Assert.True(parser.NumberOfSyntaxErrors == 0); literal = Literal.Compile(literalContext); Assert.True(literal.Execute() is string); Assert.True((string)literal.Execute() == "asd8 99asd"); }
public void AddTests() { VariableEnvironment variableEnvironment = new VariableEnvironment(); FunctionEnvironment functionEnvironment = new FunctionEnvironment(); string txt = "1+1"; AntlrInputStream inputStream = new AntlrInputStream(txt); BogieLangLexer lexer = new BogieLangLexer(inputStream); CommonTokenStream commonTokenStream = new CommonTokenStream(lexer); BogieLangParser parser = new BogieLangParser(commonTokenStream); BogieLangParser.ExpressionContext expressionContext = parser.expression(); BogieLangBaseVisitor <object> visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(expressionContext); Expression expression = Expression.Compile(expressionContext, null); Assert.True(expression.ParentExpression == null); Assert.True(expression.SubExpression.ParentExpression == expression); Assert.True((int)expression.Execute(functionEnvironment, variableEnvironment) == 2); txt = "1+1+1"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); expressionContext = parser.expression(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(expressionContext); expression = Expression.Compile(expressionContext, null); Assert.True(expression.ParentExpression == null); Assert.True(expression.SubExpression.ParentExpression == expression); Assert.True(expression.SubExpression.SubExpression.ParentExpression == expression.SubExpression); Assert.True((int)expression.Execute(functionEnvironment, variableEnvironment) == 3); txt = "1+1.1"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); expressionContext = parser.expression(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(expressionContext); expression = Expression.Compile(expressionContext, null); Assert.True(expression.ParentExpression == null); Assert.True(expression.SubExpression.ParentExpression == expression); Assert.True((double)expression.Execute(functionEnvironment, variableEnvironment) == 2.1); txt = "1+\"one\""; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); expressionContext = parser.expression(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(expressionContext); expression = Expression.Compile(expressionContext, null); Assert.True(expression.ParentExpression == null); Assert.True(expression.SubExpression.ParentExpression == expression); Assert.True((string)expression.Execute(functionEnvironment, variableEnvironment) == "1one"); txt = "1+true"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); expressionContext = parser.expression(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(expressionContext); expression = Expression.Compile(expressionContext, null); Assert.True(expression.ParentExpression == null); Assert.True(expression.SubExpression.ParentExpression == expression); Assert.True((int)expression.Execute(functionEnvironment, variableEnvironment) == 2); txt = "1+1.1+true+\"str\""; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); expressionContext = parser.expression(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(expressionContext); expression = Expression.Compile(expressionContext, null); Assert.True(expression.ParentExpression == null); Assert.True(expression.SubExpression.ParentExpression == expression); Assert.True(expression.SubExpression.SubExpression.ParentExpression == expression.SubExpression); Assert.True(expression.SubExpression.SubExpression.SubExpression.ParentExpression == expression.SubExpression.SubExpression); Assert.True((string)expression.Execute(functionEnvironment, variableEnvironment) == "3.1str"); }
public void ExpressionTests() { VariableEnvironment variableEnvironment = new VariableEnvironment(); FunctionEnvironment functionEnvironment = new FunctionEnvironment(); string txt = "1"; AntlrInputStream inputStream = new AntlrInputStream(txt); BogieLangLexer lexer = new BogieLangLexer(inputStream); CommonTokenStream commonTokenStream = new CommonTokenStream(lexer); BogieLangParser parser = new BogieLangParser(commonTokenStream); BogieLangParser.ExpressionContext expressionContext = parser.expression(); BogieLangBaseVisitor <object> visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(expressionContext); Expression expression = Expression.Compile(expressionContext, null); Assert.True(expression.Execute(functionEnvironment, new VariableEnvironment()) is int); Assert.True(expression.ParentExpression == null); Assert.True((int)expression.Execute(functionEnvironment, new VariableEnvironment()) == 1); txt = "1.0"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); expressionContext = parser.expression(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(expressionContext); expression = Expression.Compile(expressionContext, null); Assert.True(expression.Execute(functionEnvironment, new VariableEnvironment()) is double); Assert.True(expression.ParentExpression == null); Assert.True((double)expression.Execute(functionEnvironment, new VariableEnvironment()) == 1.0); txt = "false"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); expressionContext = parser.expression(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(expressionContext); expression = Expression.Compile(expressionContext, null); Assert.True(expression.Execute(functionEnvironment, new VariableEnvironment()) is bool); Assert.True(expression.ParentExpression == null); Assert.True((bool)expression.Execute(functionEnvironment, new VariableEnvironment()) == false); txt = "\"asd899asd\""; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); expressionContext = parser.expression(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(expressionContext); expression = Expression.Compile(expressionContext, null); Assert.True(expression.Execute(functionEnvironment, new VariableEnvironment()) is string); Assert.True((string)expression.Execute(functionEnvironment, new VariableEnvironment()) == "asd899asd"); txt = "VarName"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); expressionContext = parser.expression(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(expressionContext); expression = Expression.Compile(expressionContext, null); variableEnvironment.DeclareVariable(txt, BogieLangType.INTEGER); variableEnvironment.DefineVariable(txt, 1); Assert.True(expression.Execute(functionEnvironment, variableEnvironment) is int); Assert.True(expression.ParentExpression == null); Assert.True((int)expression.Execute(functionEnvironment, variableEnvironment) == 1); }
public void BodyTests() { VariableEnvironment variables = new VariableEnvironment(); FunctionEnvironment functionEnvironment = new FunctionEnvironment(); string txt = "int b=true"; AntlrInputStream inputStream = new AntlrInputStream(txt); BogieLangLexer lexer = new BogieLangLexer(inputStream); CommonTokenStream commonTokenStream = new CommonTokenStream(lexer); BogieLangParser parser = new BogieLangParser(commonTokenStream); BogieLangParser.BodyContext bodyContext = parser.body(); BogieLangBaseVisitor <object> visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(bodyContext); Body body = Body.Compile(bodyContext); try { body.Execute(functionEnvironment, variables); Assert.True(false); } catch (Exception e) { Assert.True(true);//todo: test for a specific exception types once they are created } variables.Clear(); txt = "int b=098"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); bodyContext = parser.body(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(bodyContext); body = Body.Compile(bodyContext); body.Execute(functionEnvironment, variables); Assert.True(variables["b"].BogieLangType == BogieLangType.INTEGER); Assert.True(variables["b"].Identifer == "b"); Assert.True((int)variables["b"].Value == 98); txt = "abc=123"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); bodyContext = parser.body(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(bodyContext); body = Body.Compile(bodyContext); try { Assert.True(body.Execute(functionEnvironment, variables) == null); Assert.True(false); } catch { Assert.True(true);//todo: test for specific exception types once they are created } variables.DeclareVariable("abc", BogieLangType.INTEGER); txt = "abc=123"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); bodyContext = parser.body(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(bodyContext); body = Body.Compile(bodyContext); body.Execute(functionEnvironment, variables); Assert.True(variables["abc"].BogieLangType == BogieLangType.INTEGER); Assert.True(variables["abc"].Identifer == "abc"); Assert.True((int)variables["abc"].Value == 123); txt = "return 0"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); bodyContext = parser.body(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(bodyContext); body = Body.Compile(bodyContext); Assert.True(body.Execute(functionEnvironment, variables) is int); Assert.True((int)body.Execute(functionEnvironment, variables) == 0); txt = "if(1){int b}"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); bodyContext = parser.body(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(bodyContext); body = Body.Compile(bodyContext); body.Execute(functionEnvironment, variables); txt = "if(true){int b}"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); bodyContext = parser.body(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(bodyContext); body = Body.Compile(bodyContext); body.Execute(functionEnvironment, variables); }
public void FunctionDefinitionTests() { VariableEnvironment variableEnvironment = new VariableEnvironment(); FunctionEnvironment functionEnvironment = new FunctionEnvironment(); string txt = "void funcName(){}"; AntlrInputStream inputStream = new AntlrInputStream(txt); BogieLangLexer lexer = new BogieLangLexer(inputStream); CommonTokenStream commonTokenStream = new CommonTokenStream(lexer); BogieLangParser parser = new BogieLangParser(commonTokenStream); BogieLangParser.FunctionDefinitionContext functionDefinitionContext = parser.functionDefinition(); BogieLangBaseVisitor <object> visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(functionDefinitionContext); FunctionDefinition functionDefinition = FunctionDefinition.Compile(functionDefinitionContext); functionEnvironment.FunctionDefinitions.Add("funcName", functionDefinition); functionDefinition.Execute(functionEnvironment, variableEnvironment); functionEnvironment.Clear(); variableEnvironment.DeclaredVariables = new Dictionary <string, BogieLangTypeInstance>() { { "abc", new BogieLangTypeInstance() { BogieLangType = BogieLangType.INTEGER, Identifer = "abc", Value = 1 } }, { "str", new BogieLangTypeInstance() { BogieLangType = BogieLangType.STRING, Identifer = "str", Value = "string" } }, { "lol", new BogieLangTypeInstance() { BogieLangType = BogieLangType.VOID, Identifer = "lol", Value = null } } }; txt = "void funcName(int abc,string str,void lol){}"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); functionDefinitionContext = parser.functionDefinition(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(functionDefinitionContext); functionDefinition = FunctionDefinition.Compile(functionDefinitionContext); functionEnvironment.FunctionDefinitions.Add("funcName", functionDefinition); functionDefinition.Execute(functionEnvironment, variableEnvironment); txt = "int funcName(int abc,string str,bool b){int intvar" + "\n intvar=123" + "\nintvar=1" + "\nreturn funcCall(b)" + "\n}"; string txt2 = "\nint funcCall(bool b)" + "\n{" + "\nif(b)" + "\n{" + "\n return 100" + "\n}" + "\nreturn 0" + "}"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); functionDefinitionContext = parser.functionDefinition(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(functionDefinitionContext); FunctionDefinition functionDefinition1 = FunctionDefinition.Compile(functionDefinitionContext); inputStream = new AntlrInputStream(txt2); lexer = new BogieLangLexer(inputStream); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); functionDefinitionContext = parser.functionDefinition(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(functionDefinitionContext); FunctionDefinition functionDefinition2 = FunctionDefinition.Compile(functionDefinitionContext); variableEnvironment.Clear(); functionEnvironment.Clear(); variableEnvironment.DeclaredVariables = new Dictionary <string, BogieLangTypeInstance>() { { "abc", new BogieLangTypeInstance() { BogieLangType = BogieLangType.INTEGER, Identifer = "abc", Value = 1 } }, { "str", new BogieLangTypeInstance() { BogieLangType = BogieLangType.STRING, Identifer = "str", Value = "string" } }, { "b", new BogieLangTypeInstance() { BogieLangType = BogieLangType.BOOL, Identifer = "b", Value = true } } }; functionEnvironment.DefineFunction("funcName", functionDefinition1); functionEnvironment.DefineFunction("funcCall", functionDefinition2); Assert.True((int)functionDefinition1.Execute(functionEnvironment, variableEnvironment) == 100); }
public void FunctionCallTests() { string txt = "funcCall()"; AntlrInputStream inputStream = new AntlrInputStream(txt); BogieLangLexer lexer = new BogieLangLexer(inputStream); lexer.AddErrorListener(new ParserErrorHandler <int>()); CommonTokenStream commonTokenStream = new CommonTokenStream(lexer); BogieLangParser parser = new BogieLangParser(commonTokenStream); parser.AddErrorListener(new ParserErrorHandler <object>()); BogieLangParser.FunctionCallContext functionCallContext = parser.functionCall(); BogieLangBaseVisitor <object> visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(functionCallContext); Assert.True(parser.NumberOfSyntaxErrors == 0); txt = "funcCall(\"arg\")"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); lexer.AddErrorListener(new ParserErrorHandler <int>()); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); parser.AddErrorListener(new ParserErrorHandler <object>()); functionCallContext = parser.functionCall(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(functionCallContext); Assert.True(parser.NumberOfSyntaxErrors == 0); txt = "funcCall(10.0,funcCall2())"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); lexer.AddErrorListener(new ParserErrorHandler <int>()); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); parser.AddErrorListener(new ParserErrorHandler <object>()); functionCallContext = parser.functionCall(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(functionCallContext); Assert.True(parser.NumberOfSyntaxErrors == 0); txt = "funcCall(10.0,funcCall2())"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); lexer.AddErrorListener(new ParserErrorHandler <int>()); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); parser.AddErrorListener(new ParserErrorHandler <object>()); functionCallContext = parser.functionCall(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(functionCallContext); Assert.True(parser.NumberOfSyntaxErrors == 0); txt = " funcCall\t(10.0\n,\rfuncCall2() \n\r\t)"; inputStream = new AntlrInputStream(txt); lexer = new BogieLangLexer(inputStream); lexer.AddErrorListener(new ParserErrorHandler <int>()); commonTokenStream = new CommonTokenStream(lexer); parser = new BogieLangParser(commonTokenStream); parser.AddErrorListener(new ParserErrorHandler <object>()); functionCallContext = parser.functionCall(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(functionCallContext); Assert.True(parser.NumberOfSyntaxErrors == 0); }