Esempio n. 1
0
        public LiteValue Visit(SyntaxProgramNode Node, LiteEnv Env)
        {
            var Val = LiteValue.Nil;

            foreach (var Child in Node.GetChildren())
            {
                Val = Child.Accept(this, Env);
                //Logger.DInfo($"{Child} => {Val}");
                if (Val.IsError())
                {
                    break;
                }
            }
            return(Val);
        }
Esempio n. 2
0
        // program ::= [ class | fn | statement ] ( ";" )
        private SyntaxProgramNode ParseProgram()
        {
            var ProgramNode = new SyntaxProgramNode();

            while (!TokenStream_.IsEnd())
            {
                var        Tok = TokenStream_.Peek();
                SyntaxNode Node;
                switch (Tok.Code)
                {
                case "fn":
                    Node = ParseFunctionNode();
                    break;

                case "class":
                    Node = ParseClassNode();
                    break;

                default:
                    Node = ParseStatementNode();
                    break;
                }
                if (Node == null)
                {
                    return(null);
                }
                ProgramNode.AddNode(Node);

                if (TokenStream_.PeekExpect(TokenType.Delimiter, ";"))
                {
                    TokenStream_.Take();
                }
            }

            return(ProgramNode);
        }
Esempio n. 3
0
 public ExitCode Analyzing()
 {
     ExitCode_    = ExitCode.Successful;
     ProgramNode_ = ParseProgram();
     return(ExitCode_);
 }