Ejemplo n.º 1
0
        private static AstSymbolTable CreateIntrinsicSymbols()
        {
            var symbols = new AstSymbolTable();

            AstTypeDefinitionIntrinsic.AddAll(symbols);
            return(symbols);
        }
Ejemplo n.º 2
0
        public AstModuleExternal(AstName moduleName, AstSymbolTable?parentTable = null)
            : base(AstModuleLocality.External)
        {
            var symbolName = new AstSymbolName(moduleName);

            SymbolTable = new AstSymbolTable(symbolName.CanonicalName.FullName, parentTable);
            this.SetIdentifier(new AstIdentifier(symbolName, AstIdentifierKind.Module));
        }
 public double GetR(AstSymbolTable T)
 {
     if (Right != null)
     {
         return(Right.Run(T));
     }
     return(0);
 }
 public double GetL(AstSymbolTable T)
 {
     if (Left != null)
     {
         return(Left.Run(T));
     }
     return(0);
 }
Ejemplo n.º 5
0
        public static AstSymbol?FindSymbol(this AstSymbolTable symbolTable, IAstIdentifierSite identifierSite, AstSymbolKind kind = AstSymbolKind.NotSet)
        {
            if (kind == AstSymbolKind.NotSet)
            {
                kind = identifierSite.Identifier.IdentifierKind.ToSymbolKind();
            }

            return(symbolTable.FindSymbol(identifierSite.Identifier.SymbolName.CanonicalName, kind));
        }
Ejemplo n.º 6
0
        internal void Imports(AstSymbolTable symbolTable)
        {
            var modules = symbolTable.FindSymbols(AstSymbolKind.Module)
                          .Select(s => s.Definition)
                          .OfType <AstModuleExternal>();

            foreach (var module in modules)
            {
                Namespace.AddUsing(module.Identifier.SymbolName.NativeName.Namespace);
            }
        }
Ejemplo n.º 7
0
        public Node WriteSymbolTable(AstSymbolTable symbolTable, string parentId)
        {
            var node = CreateNode("Symbols", "", "Symbols");

            node.Group = DefaultGroup;
            _          = CreateLink(parentId, node.Id, ContainsCategory);

            var symbols = String.Join("\r\n",
                                      symbolTable.Symbols.Select(s => $"{s.SymbolName}: {s.SymbolKind} ({s.SymbolLocality})"));

            var entryNode = CreateNode("Symbols", symbols);

            _ = CreateLink(node.Id, entryNode.Id, ContainsCategory);

            return(node);
        }
Ejemplo n.º 8
0
        public void LoadNamespaceExternal_System()
        {
            var symbolTable = new AstSymbolTable();
            var loader      = Compile.CreateModuleLoader();

            loader.Initialize(symbolTable);

            var sysMods = loader.LoadNamespace("System");

            sysMods.Should().NotBeEmpty();
            sysMods.All(m => m.SymbolTable.Namespace.StartsWith("System."))
            .Should().BeTrue();
            sysMods.All(m => m.SymbolTable.FindSymbols(AstSymbolKind.Function)
                        .All(e => e.SymbolLocality == AstSymbolLocality.Imported))
            .Should().BeTrue();
        }
Ejemplo n.º 9
0
        public static AstSymbolTable GetRootTable(this AstSymbolTable symbolTable)
        {
            var previousParent = symbolTable.ParentTable;
            var parent         = symbolTable;

            if (previousParent is null)
            {
                throw new InternalErrorException(
                          "Don't call GetRootTable on the Intriniscs Table.");
            }

            while (parent is not null)
            {
                previousParent = parent;
                parent         = parent.ParentTable;
            }

            // The real root contains the intrinsics
            // we return the module/file symbol table
            return(previousParent);
        }
            public Double Run(AstSymbolTable T)
            {
                switch (Operator)
                {
                case AstOperator.NOP: return(0);

                case AstOperator.Add: return(GetL(T) + GetR(T));

                case AstOperator.Sub: return(GetL(T) - GetR(T));

                case AstOperator.Mult: return(GetL(T) * GetR(T));

                case AstOperator.Pow: return(Math.Pow(GetL(T), GetR(T)));

                case AstOperator.Div: return(GetL(T) / GetR(T));

                case AstOperator.Number: return(Number);

                case AstOperator.Symbol: return(T.Get(SymbolName));
                }
                return(0);
            }
Ejemplo n.º 11
0
 public void Initialize(AstSymbolTable symbolTable)
 => SymbolTable = symbolTable;