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()); }