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 IfTests() { string txt = "if(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.IfControlContext IfControlContext = parser.ifControl(); BogieLangBaseVisitor <object> visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(IfControlContext); Assert.True(parser.NumberOfSyntaxErrors == 0); txt = "if(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>()); IfControlContext = parser.ifControl(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(IfControlContext); Assert.True(parser.NumberOfSyntaxErrors == 0); txt = @"if(true) { int b=0 b = 1 funcCall(b) if(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>()); IfControlContext = parser.ifControl(); visitor = new BogieLangBaseVisitor <object>(); visitor.Visit(IfControlContext); Assert.True(parser.NumberOfSyntaxErrors == 0); }
public static IfControl Compile(BogieLangParser.IfControlContext ifControlContext) { IfControl result = new IfControl(); if (ifControlContext.expression() != null) { result.Expression = Expression.Compile(ifControlContext.expression(), null); } if (ifControlContext.body().Length != 0) { foreach (BogieLangParser.BodyContext context in ifControlContext.body()) { result.Body.Add(Runtime.Body.Compile(context));//todo: handle funciton returns; } } return(result); }
public void IfTests() { 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.Expression.Literal.Bool == true); Assert.True(ifControl.Body.Count == 0); 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.Expression.Literal.Bool == true); Assert.True(ifControl.Body[0].VarDeclaration.BogieLangType == BogieLangType.INTEGER); Assert.True(ifControl.Body[0].VarDeclaration.Identifier == "b"); Assert.True(ifControl.Body[0].VarDeclaration.Expression.Literal.Integer == 0); txt = @"if(true) { int b=0 b = 1 funcCall(b) if(false){return 1} return 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.Expression.Literal.Bool == true); Assert.True(ifControl.Body[0].VarDeclaration.BogieLangType == BogieLangType.INTEGER); Assert.True(ifControl.Body[0].VarDeclaration.Identifier == "b"); Assert.True(ifControl.Body[0].VarDeclaration.Expression.Literal.Integer == 0); Assert.True(ifControl.Body[1].VarDefinition.Identifier == "b"); Assert.True(ifControl.Body[1].VarDefinition.Expression.Literal.Integer == 1); Assert.True(ifControl.Body[2].FunctionCall.Identifier == "funcCall"); Assert.True(ifControl.Body[2].FunctionCall.Arguments[0].Identifier == "b"); Assert.True(ifControl.Body[3].IfControl.Expression.Literal.Bool == false); Assert.True(ifControl.Body[3].IfControl.Body[0].FunctionReturn.Expression.Literal.Integer == 1); Assert.True(ifControl.Body[4].FunctionReturn.Expression.Literal.Integer == 0); }