Пример #1
0
 /// <summary>
 /// Registers a prefix unary operator.
 /// </summary>
 /// <param name="operatorTokenKind">Operator token kind.</param>
 /// <param name="precedence">Precedence. The bigger the number the more priority in the expression the operator has.</param>
 /// <param name="unaryNodeBuilder">Unary node builder function.</param>
 public void Prefix(TokenKind operatorTokenKind, int precedence, UnaryNodeBuilder <TValue> unaryNodeBuilder)
 {
     Unit(operatorTokenKind, from symbol in operatorTokenKind.Lexeme() from operand in OperandAtPrecedenceLevel(precedence) select unaryNodeBuilder(symbol, operand));
 }
Пример #2
0
 /// <summary>
 /// Registers a postfix unary operator.
 /// </summary>
 /// <param name="operatorTokenKind">Operator token kind.</param>
 /// <param name="precedence">Precedence. The bigger the number the more priority in the expression the operator has.</param>
 /// <param name="unaryNodeBuilder">Unary node builder function.</param>
 public void Postfix(TokenKind operatorTokenKind, int precedence, UnaryNodeBuilder <TValue> unaryNodeBuilder)
 {
     Extend(operatorTokenKind, precedence, left => from symbol in operatorTokenKind.Lexeme() select unaryNodeBuilder(symbol, left));
 }
Пример #3
0
        /// <summary>
        /// Registers a postfix unary operator.
        /// </summary>
        /// <param name="kind">Operator token kind.</param>
        /// <param name="precedence">Precedence. The bigger the number the more priority in the expression the operator has.</param>
        /// <param name="binaryNodeBuilder">Binary node builder function.</param>
        /// <param name="associativity">Operator associativity.</param>
        public void Binary(TokenKind kind, int precedence, BinaryNodeBuilder <TValue> binaryNodeBuilder, Associativity associativity = Associativity.Left)
        {
            var rightOperandPrecedence = associativity == Associativity.Left ? precedence : precedence - 1;

            Extend(kind, precedence, left => from symbol in kind.Lexeme() from right in OperandAtPrecedenceLevel(rightOperandPrecedence) select binaryNodeBuilder(left, symbol, right));
        }