//===--- OperatorPrecedence.h - Operator precedence levels ------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// /// /// \file /// Defines and computes precedence levels for binary/ternary operators. /// //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_BASIC_OPERATORPRECEDENCE_H #define LLVM_CLANG_BASIC_OPERATORPRECEDENCE_H #include "clang/Basic/TokenKinds.h" namespace clang { /// PrecedenceLevels - These are precedences for the binary/ternary /// operators in the C99 grammar. These have been named to relate /// with the C99 grammar productions. Low precedences numbers bind /// more weakly than high numbers. namespace prec { enum Level { Unknown = 0, // Not binary operator. Comma = 1, // , Assignment = 2, // =, *=, /=, %=, +=, -=, <<=, >>=, &=, ^=, |= Conditional = 3, // ? LogicalOr = 4, // || LogicalAnd = 5, // && InclusiveOr = 6, // | ExclusiveOr = 7, // ^ And = 8, // & Equality = 9, // ==, != Relational = 10, // >=, <=, >, < Spaceship = 11, // <=> Shift = 12, // <<, >> Additive = 13, // -, + Multiplicative = 14, // *, /, % PointerToMember = 15 // .*, ->* }; } /// Return the precedence of the specified binary operator token. prec::Level getBinOpPrecedence(tok::TokenKind Kind, bool GreaterThanIsOperator, bool CPlusPlus11); } // end namespace clang #endif // LLVM_CLANG_OPERATOR_PRECEDENCE_H