private AstExpr ParseRef() { AstExpr varRef = new AstVarRef { StName = Expect(Ktoken.Id).St }; if (Accept(Ktoken.Lbracket)) { var astIndex = new AstIndex { exprLeft = varRef, exprRight = ParseExpr() }; Expect(Ktoken.Rbracket); return(astIndex); } if (Accept(Ktoken.Dot)) { var varRefRight = new AstVarRef { StName = Expect(Ktoken.Id).St }; varRef = new AstDot { varLeft = (AstVarRef)varRef, varRight = varRefRight }; } if (FCurrent(Ktoken.Lparen)) { return new AstCall { exprFunc = varRef, rgexprParam = ParseArgumentList().ToArray() } } ; return(varRef); }
private void CompileIndex(AstIndex node, Syt syt, StringBuilder sb) { CompileRecursive(node.exprLeft, syt, sb); CompileRecursive(node.exprRight, syt, sb); sb.AppendLine("add"); sb.AppendLine("pop pointer 1"); sb.AppendLine("push that 0"); }