Beispiel #1
0
        public IExpression ParseExpression(BindingPower bindingPower)
        {
            var prefixParslet = GetPrefixParslet(_curToken.Type);

            if (prefixParslet == null)
            {
                Errors.Add($"No Prefix Parslet for {_curToken.Type}");

                return(null);
            }

            var leftexp = prefixParslet.Parse(this, _curToken);

            while (!PeekTokenIs(TokenType.EOF) && bindingPower < PeekBindingPower())
            {
                var infixParslet = GetInfixParslet(_peekToken.Type);
                if (infixParslet == null)
                {
                    return(leftexp);
                }

                NextToken();

                leftexp = infixParslet.Parse(this, leftexp, _curToken);
            }

            return(leftexp);
        }
Beispiel #2
0
 public IndexExpressionParslet(BindingPower bp)
 {
     _bindingPower = bp;
 }
Beispiel #3
0
 public ParseCallExpressionParslet(BindingPower bp, bool isRight)
 {
     _bindingPower = bp;
     _isRight      = isRight;
 }
Beispiel #4
0
 public InfixOperatorParslet(BindingPower bindingPower, bool isRight)
 {
     _bindingPower = bindingPower;
     _isRight      = isRight;
 }