Home | History | Annotate | Line # | Download | only in Basic
      1 //===--- OperatorPrecedence.h - Operator precedence levels ------*- C++ -*-===//
      2 //
      3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
      4 // See https://llvm.org/LICENSE.txt for license information.
      5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
      6 //
      7 //===----------------------------------------------------------------------===//
      8 ///
      9 /// \file
     10 /// Defines and computes precedence levels for binary/ternary operators.
     11 ///
     12 //===----------------------------------------------------------------------===//
     13 
     14 #ifndef LLVM_CLANG_BASIC_OPERATORPRECEDENCE_H
     15 #define LLVM_CLANG_BASIC_OPERATORPRECEDENCE_H
     16 
     17 #include "clang/Basic/TokenKinds.h"
     18 
     19 namespace clang {
     20 
     21 /// PrecedenceLevels - These are precedences for the binary/ternary
     22 /// operators in the C99 grammar.  These have been named to relate
     23 /// with the C99 grammar productions.  Low precedences numbers bind
     24 /// more weakly than high numbers.
     25 namespace prec {
     26   enum Level {
     27     Unknown         = 0,    // Not binary operator.
     28     Comma           = 1,    // ,
     29     Assignment      = 2,    // =, *=, /=, %=, +=, -=, <<=, >>=, &=, ^=, |=
     30     Conditional     = 3,    // ?
     31     LogicalOr       = 4,    // ||
     32     LogicalAnd      = 5,    // &&
     33     InclusiveOr     = 6,    // |
     34     ExclusiveOr     = 7,    // ^
     35     And             = 8,    // &
     36     Equality        = 9,    // ==, !=
     37     Relational      = 10,   //  >=, <=, >, <
     38     Spaceship       = 11,   // <=>
     39     Shift           = 12,   // <<, >>
     40     Additive        = 13,   // -, +
     41     Multiplicative  = 14,   // *, /, %
     42     PointerToMember = 15    // .*, ->*
     43   };
     44 }
     45 
     46 /// Return the precedence of the specified binary operator token.
     47 prec::Level getBinOpPrecedence(tok::TokenKind Kind, bool GreaterThanIsOperator,
     48                                bool CPlusPlus11);
     49 
     50 }  // end namespace clang
     51 
     52 #endif  // LLVM_CLANG_OPERATOR_PRECEDENCE_H
     53