예제 #1
0
        public SyntaxTree(string input, bool parseFull = true)
        {
            Diagnostics = new DiagnosticContainer();
            Source      = new TextSource(input);
            var tokenStream = GetTokens(input);

            tokenStream.Fill();
            Tokens = tokenStream.GetTokens();

            if (parseFull)
            {
                CommonTokenStream tokens = GetTokens(input);
                GLangParser       parser = new GLangParser(tokens);
                parser.RemoveErrorListeners();

                var ast = ASTProducer.CreateAST(parser.compilationUnit());

                if (ast.Value is CompilationUnitSyntax compSyntax)
                {
                    Root = compSyntax;
                }
                else
                {
                    Root = null;
                }

                Diagnostics.AddDiagnostics(ast.Diagnostics);
            }
        }
예제 #2
0
 internal Evaluator(BoundProgram program, Dictionary <VariableSymbol, object> variables)
 {
     diagnostics = new DiagnosticContainer();
     Program     = program;
     globals     = variables;
     locals      = new Stack <Dictionary <VariableSymbol, object> >();
 }
예제 #3
0
        public Interperatation(SyntaxTree input, Interperatation previous = null)
        {
            InputTree   = input;
            diagnostics = new DiagnosticContainer();

            CreateGlobalScope(input.Root, previous);
            CreateProgram();
        }
예제 #4
0
        public static BoundStatement Error(Diagnostic diagnostic, ref DiagnosticContainer diagnostics)
        {
            diagnostics.AddDiagnostic(diagnostic);

            return(Error(diagnostic));
        }
예제 #5
0
 public FunctionBinder(BoundScope programScope)
 {
     diagnostics = new DiagnosticContainer();
     functions   = new List <FunctionSymbol>();
     scope       = programScope;
 }
예제 #6
0
 public BindingEnvironment(bool chainDiagnostics)
 {
     this.chainDiagnostics = chainDiagnostics;
     diagnostics           = new DiagnosticContainer();
 }
예제 #7
0
        public static BoundExpression Error(Diagnostic diagnostic, ref DiagnosticContainer diagnostics)
        {
            diagnostics.AddDiagnostic(diagnostic);

            return(Error(diagnostic));
        }