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); }
public void RegisterPrefix(TokenType tokenType, PrefixFn prefixFn) { prefixParseFns.Add(tokenType, prefixFn); }
public ParseRule(PrefixFn prefix, InfixFn infix, Precedence precedence) { this.prefix = prefix; this.infix = infix; this.precedence = precedence; }