104d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org// 288f6e946b97ee15fe199e3fa151174c0bfeaa895Jamie Madill// Copyright (c) 2012-2014 The ANGLE Project Authors. All rights reserved. 304d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org// Use of this source code is governed by a BSD-style license that can be 404d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org// found in the LICENSE file. 504d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org// 604d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org 704d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org#ifndef COMPILER_PREPROCESSOR_TOKENIZER_H_ 804d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org#define COMPILER_PREPROCESSOR_TOKENIZER_H_ 904d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org 1004d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org#include "Input.h" 1104d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org#include "Lexer.h" 1204d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org#include "pp_utils.h" 1304d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org 1404d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.orgnamespace pp 1504d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org{ 1604d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org 172c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.orgclass Diagnostics; 182c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org 1904d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.orgclass Tokenizer : public Lexer 2004d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org{ 2104d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org public: 2204d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org struct Context 2304d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org { 24d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo Diagnostics *diagnostics; 252c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org 2604d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org Input input; 2704d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org // The location where yytext points to. Token location should track 2804d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org // scanLoc instead of Input::mReadLoc because they may not be the same 2904d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org // if text is buffered up in the scanner input buffer. 3004d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org Input::Location scanLoc; 3104d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org 3204d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org bool leadingSpace; 3304d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org bool lineStart; 3404d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org }; 3504d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org 36d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo Tokenizer(Diagnostics *diagnostics); 3704d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org ~Tokenizer(); 3804d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org 39d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo bool init(size_t count, const char * const string[], const int length[]); 4046aa13d87fdc2da6d36fd14f678f204f8f98ae41alokp@chromium.org 4146aa13d87fdc2da6d36fd14f678f204f8f98ae41alokp@chromium.org void setFileNumber(int file); 4246aa13d87fdc2da6d36fd14f678f204f8f98ae41alokp@chromium.org void setLineNumber(int line); 435508f39d0cffc9a68565bbff2e6f61332a509cdfJamie Madill void setMaxTokenSize(size_t maxTokenSize); 4446aa13d87fdc2da6d36fd14f678f204f8f98ae41alokp@chromium.org 45d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo virtual void lex(Token *token); 4604d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org 4704d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org private: 4804d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org PP_DISALLOW_COPY_AND_ASSIGN(Tokenizer); 4904d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org bool initScanner(); 5004d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org void destroyScanner(); 5104d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org 52d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo void *mHandle; // Scanner handle. 5304d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org Context mContext; // Scanner extra. 545508f39d0cffc9a68565bbff2e6f61332a509cdfJamie Madill size_t mMaxTokenSize; // Maximum token size 5504d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org}; 5604d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org 5704d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org} // namespace pp 5804d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org#endif // COMPILER_PREPROCESSOR_TOKENIZER_H_ 5904d7d22bb835408a82600244e09b9dcacbc0fa11alokp@chromium.org 60