public void BasicTest() { var ast1 = new IdListNode(1, new IdNode(1, "x"), new IdNode(1, "y")); var ast2 = new IdListNode(1, new IdNode(1, "X"), new IdNode(1, "y")); Assert.That(ast1.Substitute(new IdNode(2, "x"), new IdNode(2, "X")), Is.EqualTo(ast2)); }
public void SubstituteKeepsOriginalTest() { ASTNode ast1 = new IdListNode(1, new IdNode(1, "x"), new IdNode(1, "y")); ASTNode ast2 = new IdListNode(1, new IdNode(1, "X"), new IdNode(1, "y")); Assert.That(ast1.Substitute(new IdNode(2, "x"), new IdNode(2, "X")), Is.EqualTo(ast2)); Assert.That(ast1, Is.EqualTo(new IdListNode(1, new IdNode(1, "x"), new IdNode(1, "y")))); }
public void Visit(IdListNode node) { if (!isFirstEncounter) { foreach (var subnode in node) { var variableName = subnode.AnchorToken.Lexeme; if (localScopeSymbolTable.Contains(variableName)) { throw new SemanticError("Duplicated variable declaration: " + variableName, node[0].AnchorToken); } else { localScopeSymbolTable.Add(variableName); } foreach (var subnode_of_subnode /* owo */ in subnode) { Visit((dynamic)subnode_of_subnode); } } } }
public Node IdList() { var node = new IdListNode(); if (CurrentToken == TokenCategory.PARENTHESIS_CLOSE) { return(node); } node.Add(new IdentifierNode() { AnchorToken = Expect(TokenCategory.IDENTIFIER) }); while (CurrentToken == TokenCategory.COMMA) { Expect(TokenCategory.COMMA); node.Add(new IdentifierNode() { AnchorToken = Expect(TokenCategory.IDENTIFIER) }); } return(node); }
public virtual TResult Visit(IdListNode node) => this.VisitChildren(node);
public override void CollectDataFromChildren() => IdListNode = FindFirstChildNodeByType <IdListNode>();