private static void parsePrecedence(Precedence precedence) { advance(); ParseFn prefixRule = getRule(parser.previous.type).prefix; if (prefixRule == null) { error("Expect expression."); return; } bool canAssign = precedence <= Precedence.PREC_ASSIGNMENT; prefixRule(canAssign); while (precedence <= getRule(parser.current.type).precedence) { advance(); ParseFn infixRule = getRule(parser.previous.type).infix; infixRule(canAssign); } if (canAssign && match(TokenType.TOKEN_EQUAL)) { error("Invalid assignment target."); } }
public Parser(string type, ParseFn fn) { Type = type; Fn = fn; }
public ParseRule(ParseFn prefix, ParseFn infix, Precedence precedence) { this.prefix = prefix; this.infix = infix; this.precedence = precedence; }
public Rule(ParseFn prefix, ParseFn infix, Precedence precedence) { Prefix = prefix; Infix = infix; Precedence = precedence; }