public override Tree VisitFuncDeclaration(FuncDeclarationContext context)
        {
            String        name          = context.name.Text;
            ResultContext resultContext = context.result();
            IList <FormalParameterContext> parameterContexts = context._params;
            bool isPrivate = context.isPrivate;

            TypeContext resType = resultContext.type();
            TypeTree    type;

            if (resType != null)
            {
                type = (TypeTree)VisitType(resType);
            }
            else
            {
                //void
                IToken voidToken = resultContext.Start;
                int    len       = voidToken.StopIndex - voidToken.StartIndex;
                type = new PrimitiveTypeNode(voidToken.Line, voidToken.Column, voidToken.Line, voidToken.Column + len,
                                             TypeTag.VOID);
            }

            VariableDeclaration[] parameters = new VariableDeclaration[parameterContexts.Count];
            for (int i = 0; i < parameterContexts.Count; i++)
            {
                parameters[i] = (VariableDeclaration)VisitFormalParameter(parameterContexts[i]);
            }

            Block block = (Block)VisitBlock(context.funcBody().block());

            return(new FuncDef(type.beginLine, type.beginCol, block.endLine, block.endCol, name, type, parameters,
                               block, isPrivate));
        }
Exemple #2
0
        private PrimitiveTypeNode ConnectPrimitiveTypeToInputTerminal(Terminal inputTerminal, NIType type)
        {
            var primitive = new PrimitiveTypeNode(inputTerminal.ParentDiagram, type);

            Wire.Create(inputTerminal.ParentDiagram, primitive.OutputTerminal, inputTerminal);
            return(primitive);
        }
Exemple #3
0
        public void VisitPrimitiveType(PrimitiveTypeNode node)
        {
            var typeToken     = node.TypeToken;
            var knownTypeCode = KnownType.GetTypeCode(typeToken.Tag);

            _type = KnownType.GetType(knownTypeCode);
        }
Exemple #4
0
 public PrimitiveTypeExpressionNode(PrimitiveTypeNode primitiveType, Token name, AccesorExpressionNode accessor, string posId)
 {
     PrimitiveType = primitiveType;
     IdToken       = name;
     Accessor      = accessor;
     PostId        = posId;
 }
        public override Tree VisitType(TypeContext context)
        {
            TypeTag  type;
            TypeTree tree;
            IToken   token = context.primitive;

            if (token != null)
            {
                switch (token.Type)
                {
                case INT:
                    type = TypeTag.INT;
                    break;

                case LONG:
                    type = TypeTag.LONG;
                    break;

                case FLOAT:
                    type = TypeTag.FLOAT;
                    break;

                case DOUBLE:
                    type = TypeTag.DOUBLE;
                    break;

                case BOOLEAN:
                    type = TypeTag.BOOLEAN;
                    break;

                case CHAR:
                    type = TypeTag.CHAR;
                    break;

                case CSTRING:
                    type = TypeTag.C_STRING;
                    break;

                default:
                    throw new ArgumentException();
                }

                int endCol = token.Column + token.StopIndex - token.StopIndex;
                tree = new PrimitiveTypeNode(token.Line, token.Column, token.Line, endCol, type);
            }
            else
            {
                tree = new DeclaredType(context.Start.Line, context.Start.Column, context.Stop.Line,
                                        context.Stop.Column, context.structName.Text);
            }

            for (int i = 0; i < context.arrays; i++)
            {
                tree = new ArrayTypeTree(context.Start.Line, context.Start.Column, context.Stop.Line,
                                         context.Stop.Column, tree);
            }

            return(tree);
        }
Exemple #6
0
        public static Either <ParseException, Pair <List <IToken>, TypeNode> > Parse(List <IToken> tokens, SymT symT, IScopedTable <IEntityType, string> parentTypeTable)
        {
            Console.WriteLine("TypeNode");
            var maybePrimitiveType = PrimitiveTypeNode.Parse(tokens);

            if (maybePrimitiveType.IsLeft)
            {
                var maybeArrayType = ArrayTypeNode.Parse(tokens, symT, parentTypeTable);
                if (maybeArrayType.IsLeft)
                {
                    SymT NewSymT         = new SymT(symT);
                    var  maybeRecordType = RecordTypeNode.Parse(tokens, NewSymT, parentTypeTable);

                    if (maybeRecordType.IsLeft)
                    {
                        if (tokens.Count < 1)
                        {
                            return(NotATypeException);
                        }
                        if (!(tokens[0] is IdentifierToken))
                        {
                            return(NotATypeException);
                        }
                        IdentifierToken identifier = (IdentifierToken)tokens[0];
                        if (!(symT.ContainRec(identifier)))
                        {
                            // TODO: return an exception instead
                            Console.Write("No such identifier");
                        }
                        tokens = tokens.Skip(1).ToList();
                        return(new Pair <List <IToken>, TypeNode> (tokens, new TypeNode(identifier)));
                    }
                    tokens = maybeRecordType.RightToList()[0].First;
                    return(new Pair <List <IToken>, TypeNode> (tokens, new TypeNode(
                                                                   maybeRecordType.RightToList()[0].Second)));
                }
                tokens = maybeArrayType.RightToList()[0].First;
                return(new Pair <List <IToken>, TypeNode> (tokens, new TypeNode(
                                                               maybeArrayType.RightToList()[0].Second)));
            }

            tokens = maybePrimitiveType.RightToList()[0].First;
            return(new Pair <List <IToken>, TypeNode> (tokens, new TypeNode(
                                                           maybePrimitiveType.RightToList()[0].Second)));
        }
Exemple #7
0
 public TypeNode(PrimitiveTypeNode primitiveType)
 {
     PrimitiveType = primitiveType;
 }
Exemple #8
0
 public override Type visitPrimitiveType(PrimitiveTypeNode prim, Environment env)
 {
     return(symtab.typeForTag(prim.type));
 }
Exemple #9
0
 public virtual T visitPrimitiveType(PrimitiveTypeNode prim, A arg) => visit(prim, arg);
Exemple #10
0
 public PrimitiveTypeRepresentation(PrimitiveTypeNode typeNode)
 {
     TypeNode = typeNode;
 }
Exemple #11
0
 public override object visitPrimitiveType(PrimitiveTypeNode prim, WritableScope scope)
 {
     return(symtab.typeForTag(prim.type));
 }