blob: 78eb86dd3ba584ac58f0425c5fd21d5fc67f7aab [file] [log] [blame]
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001//
Jamie Madill88f6e942014-02-19 10:27:53 -05002// Copyright (c) 2012-2014 The ANGLE Project Authors. All rights reserved.
alokp@chromium.org04d7d222012-05-16 19:24:07 +00003// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6
7#ifndef COMPILER_PREPROCESSOR_TOKENIZER_H_
8#define COMPILER_PREPROCESSOR_TOKENIZER_H_
9
10#include "Input.h"
11#include "Lexer.h"
12#include "pp_utils.h"
13
14namespace pp
15{
16
alokp@chromium.org2c958ee2012-05-17 20:35:42 +000017class Diagnostics;
18
alokp@chromium.org04d7d222012-05-16 19:24:07 +000019class Tokenizer : public Lexer
20{
21 public:
22 struct Context
23 {
Zhenyao Mod526f982014-05-13 14:51:19 -070024 Diagnostics *diagnostics;
alokp@chromium.org2c958ee2012-05-17 20:35:42 +000025
alokp@chromium.org04d7d222012-05-16 19:24:07 +000026 Input input;
27 // The location where yytext points to. Token location should track
28 // scanLoc instead of Input::mReadLoc because they may not be the same
29 // if text is buffered up in the scanner input buffer.
30 Input::Location scanLoc;
31
32 bool leadingSpace;
33 bool lineStart;
34 };
35
Zhenyao Mod526f982014-05-13 14:51:19 -070036 Tokenizer(Diagnostics *diagnostics);
alokp@chromium.org04d7d222012-05-16 19:24:07 +000037 ~Tokenizer();
38
Zhenyao Mod526f982014-05-13 14:51:19 -070039 bool init(size_t count, const char * const string[], const int length[]);
alokp@chromium.org46aa13d2012-06-15 15:40:27 +000040
41 void setFileNumber(int file);
42 void setLineNumber(int line);
Jamie Madill5508f392014-02-20 13:31:36 -050043 void setMaxTokenSize(size_t maxTokenSize);
alokp@chromium.org46aa13d2012-06-15 15:40:27 +000044
Zhenyao Mod526f982014-05-13 14:51:19 -070045 virtual void lex(Token *token);
alokp@chromium.org04d7d222012-05-16 19:24:07 +000046
47 private:
48 PP_DISALLOW_COPY_AND_ASSIGN(Tokenizer);
49 bool initScanner();
50 void destroyScanner();
51
Zhenyao Mod526f982014-05-13 14:51:19 -070052 void *mHandle; // Scanner handle.
alokp@chromium.org04d7d222012-05-16 19:24:07 +000053 Context mContext; // Scanner extra.
Jamie Madill5508f392014-02-20 13:31:36 -050054 size_t mMaxTokenSize; // Maximum token size
alokp@chromium.org04d7d222012-05-16 19:24:07 +000055};
56
57} // namespace pp
alokp@chromium.org04d7d222012-05-16 19:24:07 +000058
Geoff Lang0a73dd82014-11-19 16:18:08 -050059#endif // COMPILER_PREPROCESSOR_TOKENIZER_H_