1909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper//===--- OperatorPrecedence.h - Operator precedence levels ------*- C++ -*-===// 2909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper// 3909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper// The LLVM Compiler Infrastructure 4909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper// 5909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper// This file is distributed under the University of Illinois Open Source 6909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper// License. See LICENSE.TXT for details. 7909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper// 8909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper//===----------------------------------------------------------------------===// 9909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper/// 10909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper/// \file 11909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper/// \brief Defines and computes precedence levels for binary/ternary operators. 12909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper/// 13909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper//===----------------------------------------------------------------------===// 14909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper 15909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper#ifndef LLVM_CLANG_OPERATOR_PRECEDENCE_H 16909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper#define LLVM_CLANG_OPERATOR_PRECEDENCE_H 17909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper 18909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper#include "clang/Basic/TokenKinds.h" 19909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper 20909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jaspernamespace clang { 21909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper 22909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper/// PrecedenceLevels - These are precedences for the binary/ternary 23909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper/// operators in the C99 grammar. These have been named to relate 24909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper/// with the C99 grammar productions. Low precedences numbers bind 25909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper/// more weakly than high numbers. 26909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jaspernamespace prec { 27909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper enum Level { 28909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper Unknown = 0, // Not binary operator. 29909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper Comma = 1, // , 30909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper Assignment = 2, // =, *=, /=, %=, +=, -=, <<=, >>=, &=, ^=, |= 31909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper Conditional = 3, // ? 32909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper LogicalOr = 4, // || 33909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper LogicalAnd = 5, // && 34909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper InclusiveOr = 6, // | 35909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper ExclusiveOr = 7, // ^ 36909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper And = 8, // & 37909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper Equality = 9, // ==, != 38909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper Relational = 10, // >=, <=, >, < 39909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper Shift = 11, // <<, >> 40909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper Additive = 12, // -, + 41909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper Multiplicative = 13, // *, /, % 42909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper PointerToMember = 14 // .*, ->* 43909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper }; 44909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper} 45909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper 46909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper/// \brief Return the precedence of the specified binary operator token. 47909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasperprec::Level getBinOpPrecedence(tok::TokenKind Kind, bool GreaterThanIsOperator, 4880ad52f327b532bded5c5b0ee38779d841c6cd35Richard Smith bool CPlusPlus11); 49909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper 50909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper} // end namespace clang 51909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper 52909610266e67ce40a9d8a4df8be81b3de999b120Daniel Jasper#endif // LLVM_CLANG_OPERATOR_PRECEDENCE_H 53