示例#1
0
        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);
        }
示例#2
0
 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");
 }