Exemple #1
0
        private ConstDefinitionsTemporaryNode GetConstDefinitionsTemporaryNode(DaedalusParser.ConstDefContext constDefContext)
        {
            NameNode typeNameNode = new NameNode(GetLocation(constDefContext.dataType()), constDefContext.dataType().GetText());

            List <DeclarationNode> constDefinitionNodes = new List <DeclarationNode>();

            foreach (IParseTree childContext in constDefContext.children)
            {
                if (childContext is DaedalusParser.ConstValueDefContext constValueDefContext)
                {
                    DaedalusParser.NameNodeContext nameNodeContext = constValueDefContext.nameNode();
                    NameNode            nameNode            = new NameNode(GetLocation(nameNodeContext), nameNodeContext.GetText());
                    ExpressionNode      rightSideNode       = (ExpressionNode)Visit(constValueDefContext.constValueAssignment().expression());
                    ConstDefinitionNode constDefinitionNode = new ConstDefinitionNode(GetLocation(constValueDefContext),
                                                                                      typeNameNode, nameNode, rightSideNode);
                    _constDefinitionNodes.Add(constDefinitionNode);
                    constDefinitionNodes.Add(constDefinitionNode);
                }
                else if (childContext is DaedalusParser.ConstArrayDefContext constArrayDefContext)
                {
                    DaedalusParser.NameNodeContext nameNodeContext = constArrayDefContext.nameNode();
                    NameNode       nameNode      = new NameNode(GetLocation(nameNodeContext), nameNodeContext.GetText());
                    ExpressionNode arraySizeNode = (ExpressionNode)VisitArraySize(constArrayDefContext.arraySize());

                    List <ExpressionNode> elementNodes = new List <ExpressionNode>();
                    foreach (DaedalusParser.ExpressionContext expressionContext in constArrayDefContext.constArrayAssignment().expression())
                    {
                        elementNodes.Add((ExpressionNode)Visit(expressionContext));
                    }

                    ConstArrayDefinitionNode constArrayDefinitionNode =
                        new ConstArrayDefinitionNode(GetLocation(nameNodeContext), typeNameNode, nameNode, arraySizeNode,
                                                     elementNodes);
                    _arrayDeclarationNodes.Add(constArrayDefinitionNode);
                    constDefinitionNodes.Add(constArrayDefinitionNode);
                }
            }
            return(new ConstDefinitionsTemporaryNode(GetLocation(constDefContext), constDefinitionNodes));
        }