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); }
// 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); }
public ExitCode Analyzing() { ExitCode_ = ExitCode.Successful; ProgramNode_ = ParseProgram(); return(ExitCode_); }