public FuncLite(string Name, LiteEnv Env, SyntaxParamListStatementNode ParamList, SyntaxBlockStatementNode Block) : base(Name) { this.Env_ = Env; this.ParamList_ = ParamList; this.Block_ = Block; }
public LiteValue Visit(SyntaxBlockStatementNode Node, LiteEnv Env) { var Val = LiteValue.Nil; foreach (var Child in Node.GetChildren()) { Val = Child.Accept(this, Env); //Logger.DInfo($"{Child} => {Val}"); if (Child.GetType() == SyntaxNodeType.ReturnStatement) { return(Val); } if (Val.IsError()) { break; } } return(Val); }
// block ::= "{" [ statement ] { ";" [ statement ] } "}" private SyntaxBlockStatementNode ParseBlockNode() { if (!TokenStream_.TakeExpect(TokenType.Delimiter, "{", out Token NextTok)) { ExitCode_ = new ExitUnexpectedSymbolCode(NextTok); return(null); } var BlockNode = new SyntaxBlockStatementNode(); while (!TokenStream_.IsEnd()) { var Tok = TokenStream_.Peek(); if (Tok.Type == TokenType.Delimiter) { TokenStream_.Take(); switch (Tok.Code) { case "}": return(BlockNode); case ";": continue; default: break; } ExitCode_ = new ExitUnexpectedSymbolCode(Tok); return(null); } var Node = ParseStatementNode(); BlockNode.AddNode(Node); } ExitCode_ = new ExitFailedCode("end of file"); return(null); }
public SyntaxFunctionNode(string FuncName, SyntaxParamListStatementNode ParamListNode, SyntaxBlockStatementNode BlockNode) : base(ParamListNode, BlockNode) { FuncName_ = FuncName; }
public SyntaxWhileStatementNode(SyntaxNode ExprNode, SyntaxBlockStatementNode BlockNode) : base(ExprNode, BlockNode) { }
public SyntaxIfStatementNode(SyntaxNode ExprNode, SyntaxBlockStatementNode BlockNode, SyntaxNode ElseNode) : base(ExprNode, BlockNode, ElseNode) { }