//
// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//

#ifndef COMPILER_PREPROCESSOR_EXPRESSIONPARSER_H_
#define COMPILER_PREPROCESSOR_EXPRESSIONPARSER_H_

#include "common/angleutils.h"
#include "compiler/preprocessor/DiagnosticsBase.h"

namespace pp
{

class Lexer;
struct Token;

class ExpressionParser : angle::NonCopyable
{
  public:
    struct ErrorSettings
    {
        Diagnostics::ID unexpectedIdentifier;
        bool integerLiteralsMustFit32BitSignedRange;
    };

    ExpressionParser(Lexer *lexer, Diagnostics *diagnostics);

    bool parse(Token *token,
               int *result,
               bool parsePresetToken,
               const ErrorSettings &errorSettings,
               bool *valid);

  private:
    Lexer *mLexer;
    Diagnostics *mDiagnostics;
};

}  // namespace pp

#endif  // COMPILER_PREPROCESSOR_EXPRESSIONPARSER_H_
