示例#1
0
    public SyntaxTreeBuilder_CSharp(TokenScanner tokenScanner, Scope_CompilationUnit pComplilationUnitScop)
    {
        m_kTokenScanner      = tokenScanner;
        ComplilationUnitScop = pComplilationUnitScop;
        tokenScanner.Reset();
        tokenScanner.OnTokenMoveAt = OnTokanMoveAt;
        tokenScanner.EOF           = new LexerToken(LexerToken.Kind.EOF, string.Empty)
        {
            tokenId = m_kParser.tokenEOF
        };

        //lines = formatedLines;
        //if (EOF == null)
        //    EOF = new LexerToken(LexerToken.Kind.EOF, string.Empty) { tokenId = parser.tokenEOF };
    }
    public static Scope_CompilationUnit GetCompilationUnitScope(SD_Assembly assembly, string sName, bool forceCreateNew = false)
    {
        if (assembly == null)
        {
            return(null);
        }

        if (assembly.compilationUnits == null)
        {
            assembly.compilationUnits = new Dictionary <string, Scope_CompilationUnit>();
        }

        Scope_CompilationUnit scope;

        if (!assembly.compilationUnits.TryGetValue(sName, out scope) || forceCreateNew)
        {
            if (forceCreateNew)
            {
                if (scope != null && scope.typeDeclarations != null)
                {
                    var newResolverVersion = false;
                    var scopeTypes         = scope.typeDeclarations;
                    for (var i = scopeTypes.Count; i-- > 0;)
                    {
                        var typeDeclaration = scopeTypes[i];
                        scope.RemoveDeclaration(typeDeclaration);
                        newResolverVersion = true;
                    }
                    if (newResolverVersion)
                    {
                        ++LR_SyntaxTree.resolverVersion;
                        if (LR_SyntaxTree.resolverVersion == 0)
                        {
                            ++LR_SyntaxTree.resolverVersion;
                        }
                    }
                }
                assembly.compilationUnits.Remove(sName);
            }

            scope = new Scope_CompilationUnit
            {
                assembly = assembly,
                path     = sName,
            };
            assembly.compilationUnits[sName] = scope;

            //var cuDefinition = new CompilationUnitDefinition
            //{
            //    kind = SymbolKind.None,
            //    parentSymbol = assembly,
            //};

            scope.declaration = new Declaration_Namespace
            {
                kind       = SymbolKind.Namespace,
                definition = assembly.GlobalNamespace,
            };
            scope.definition = assembly.GlobalNamespace;
        }
        return(scope);
    }
 public static LR_SyntaxTree Parse(FormatedLine[] lsFormatedLine, Scope_CompilationUnit cus)
 {
     return(new SyntaxTreeBuilder_CSharp(new TokenScanner(lsFormatedLine), cus).Build());
 }