public static SyntaxTree ParseText(SourceText sourceText) { var parser = new Parser(new Lexer(sourceText)); SourceFileRoot root = parser.ParseSourceFile(); return(new SyntaxTree(sourceText, root, parser.DiagnosticBuilder)); }
internal SourceFileSymbol( SourceModuleSymbol module, ResolvedPath filePath, string relativePathNoExtension, SourceFileRoot syntax) : base(relativePathNoExtension) { Module = module; FilePath = filePath; (int chapterCount, int sceneCount, int functionCount) = ((int)syntax.ChapterCount, (int)syntax.SceneCount, (int)syntax.FunctionCount); _chapterMap = new Dictionary <string, ChapterSymbol>(chapterCount); _sceneMap = new Dictionary <string, SceneSymbol>(sceneCount); _functionMap = new Dictionary <string, FunctionSymbol>(functionCount); var chapters = ImmutableArray.CreateBuilder <ChapterSymbol>(chapterCount); var scenes = ImmutableArray.CreateBuilder <SceneSymbol>(sceneCount); var functions = ImmutableArray.CreateBuilder <FunctionSymbol>(functionCount); foreach (SubroutineDeclaration decl in syntax.SubroutineDeclarations) { string declName = decl.Name.Value; switch (decl.Kind) { case SyntaxNodeKind.ChapterDeclaration: var chapterDecl = (ChapterDeclaration)decl; var chapter = new ChapterSymbol(this, declName, chapterDecl); _chapterMap.Add(declName, chapter); chapters.Add(chapter); break; case SyntaxNodeKind.FunctionDeclaration: var functionDecl = (FunctionDeclaration)decl; var function = new FunctionSymbol(this, declName, functionDecl); _functionMap[declName] = function; functions.Add(function); break; case SyntaxNodeKind.SceneDeclaration: var sceneDecl = (SceneDeclaration)decl; var scene = new SceneSymbol(this, declName, sceneDecl); _sceneMap.Add(declName, scene); scenes.Add(scene); break; } } Chapters = chapters.ToImmutable(); Functions = functions.ToImmutable(); Scenes = scenes.ToImmutable(); SubroutineCount = (uint)(chapters.Count + functions.Count + scenes.Count); }