Beispiel #1
0
        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.");
            }
        }
Beispiel #2
0
 public Parser(string type, ParseFn fn)
 {
     Type = type;
     Fn   = fn;
 }
Beispiel #3
0
 public ParseRule(ParseFn prefix, ParseFn infix, Precedence precedence)
 {
     this.prefix = prefix; this.infix = infix; this.precedence = precedence;
 }
Beispiel #4
0
 public Rule(ParseFn prefix, ParseFn infix, Precedence precedence)
 {
     Prefix     = prefix;
     Infix      = infix;
     Precedence = precedence;
 }