コード例 #1
0
        public override void Visit(GraphDeclEdgeNode node)
        {
            _symbolTable.SetCurrentNode(node);
            AllType vertexFromType = _symbolTable.RetrieveSymbol(node.VertexNameFrom, false) ?? AllType.UNKNOWNTYPE;
            AllType vertexToType   = _symbolTable.RetrieveSymbol(node.VertexNameTo, false) ?? AllType.UNKNOWNTYPE;

            CheckAllowedCast(vertexFromType, vertexToType);
            foreach (KeyValuePair <string, AbstractNode> item in node.ValueList)
            {
                item.Value.Parent = node;
                item.Value.Accept(this);
                AllType?       typeOfKey = _symbolTable.GetAttributeType(item.Key, AllType.EDGE);
                ExpressionNode expNode;
                if (item.Value is BoolComparisonNode)
                {
                    expNode = (ExpressionNode)item.Value.Children[0];
                }
                else
                {
                    expNode = item.Value as ExpressionNode;
                }
                if (expNode is ExpressionNode)
                {
                    if (typeOfKey != expNode.OverAllType)
                    {
                        _symbolTable.TypeExpressionMismatch();
                    }
                }
            }
        }