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 AddVariable(string name, string code, [CallerLineNumber] int l = 0) { code = Replace(code); var v = new VarDefinition(name, code); Vars.Add(v); }
public Node VarDef() { var varDefinition = new VarDefinition() { AnchorToken = Expect(TokenCategory.VAR) }; varDefinition.Add(VarList()); Expect(TokenCategory.SEMICOLON); return(varDefinition); }
public void Visit(VarDefinition node) { var identifierList = node[0]; foreach (var n in identifierList) { var id = n.AnchorToken.Value; if (Variables.Contains(id, Scope)) { throw new SemanticError("Duplicated variable '" + id + "' on " + Scope, n.AnchorToken); } Variables.Add(new Variable(id, Scope)); } }
public string Visit(VarDefinition node) { var result = ""; if (!isGlobal) { foreach (var child in node[0]) { var varName = child.AnchorToken.Value; Variables.Add(new Variable(varName, Scope)); result += "\t\t.locals init (int32 '" + varName + "')\n"; } return(result); } foreach (var child in node[0]) { var varName = child.AnchorToken.Value; Variables.Add(new Variable(varName, Scope)); result += "\t.field private static int32 '" + varName + "'\n"; } return(result); }
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); }
private VarDefinition ParseVarDefinition() { var id = ParseIdentifier(); var node = new VarDefinition(); node.AddChild(id); var t = NextToken(); if (t.IsOperator(Operator.Assign)) { var expr = ParseExpression(); node.AddChild(expr); } else if (t.IsDelimiter(Delimiter.BraceOpen)) { node = new ArrayDefinition(); node.AddChild(id); var expr = ParseExpression(); node.AddChild(expr); t = NextToken(); AssertDelimiter(Delimiter.BraceClose, t); node.PropagatePosition(t); } else { _stream.Previous(); } return(node); }