Exemple #1
0
        public static SyntaxTree ParseText(SourceText sourceText)
        {
            var            parser = new Parser(new Lexer(sourceText));
            SourceFileRoot root   = parser.ParseSourceFile();

            return(new SyntaxTree(sourceText, root, parser.DiagnosticBuilder));
        }
Exemple #2
0
        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);
        }