Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  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_BASIC_OPERATORPRECEDENCE_H
  53.