private static AstSymbolTable CreateIntrinsicSymbols() { var symbols = new AstSymbolTable(); AstTypeDefinitionIntrinsic.AddAll(symbols); return(symbols); }
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); }
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)); }
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); } }
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); }
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(); }
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); }
public void Initialize(AstSymbolTable symbolTable) => SymbolTable = symbolTable;