Example #1
0
        static Expr parsePrecedence(Precedence precedence)
        {
            Expr expr = null;

            parser.advance();
            PrefixFn prefixRule = getRule(parser.previous().type).prefix;

            if (prefixRule == null)
            {
                parser.error(parser.previous(), "Expect expression.");
                return(null);
            }

            //bool canAssign = precedence <= Precedence.PREC_ASSIGNMENT;
            expr = prefixRule();

            while (precedence <= getRule(parser.peek().type).precedence)
            {
                parser.advance();
                InfixFn infixRule = getRule(parser.previous().type).infix;
                expr = infixRule(expr);
            }

            return(expr);
        }
Example #2
0
 public void RegisterPrefix(TokenType tokenType, PrefixFn prefixFn)
 {
     prefixParseFns.Add(tokenType, prefixFn);
 }
Example #3
0
 public ParseRule(PrefixFn prefix, InfixFn infix, Precedence precedence)
 {
     this.prefix = prefix; this.infix = infix; this.precedence = precedence;
 }