OLD | NEW |
| (Empty) |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #ifndef MOJO_PUBLIC_TOOLS_BINDINGS_MOJOM_CPP_LEXER_H_ | |
6 #define MOJO_PUBLIC_TOOLS_BINDINGS_MOJOM_CPP_LEXER_H_ | |
7 | |
8 #include <cstddef> | |
9 #include <string> | |
10 #include <vector> | |
11 | |
12 #include "base/macros.h" | |
13 | |
14 namespace mojo { | |
15 namespace mojom { | |
16 | |
17 enum class TokenType { | |
18 // Errors | |
19 ERROR_UNKNOWN, | |
20 ERROR_ILLEGAL_CHAR, | |
21 ERROR_UNTERMINATED_STRING_LITERAL, | |
22 | |
23 // Punctuators and Separators | |
24 LPAREN, | |
25 RPAREN, | |
26 LBRACKET, | |
27 RBRACKET, | |
28 LBRACE, | |
29 RBRACE, | |
30 LANGLE, | |
31 RANGLE, | |
32 SEMI, | |
33 COMMA, | |
34 DOT, | |
35 MINUS, | |
36 PLUS, | |
37 AMP, | |
38 QSTN, | |
39 EQUALS, | |
40 RESPONSE, | |
41 | |
42 // Identifiers | |
43 IDENTIFIER, | |
44 | |
45 // Keywords | |
46 IMPORT, | |
47 MODULE, | |
48 STRUCT, | |
49 UNION, | |
50 INTERFACE, | |
51 ENUM, | |
52 CONST, | |
53 TRUE, | |
54 FALSE, | |
55 DEFAULT, | |
56 | |
57 // Constants | |
58 INT_CONST_DEC, | |
59 INT_CONST_HEX, | |
60 FLOAT_CONST, | |
61 ORDINAL, | |
62 STRING_LITERAL, | |
63 | |
64 // TODO(azani): Check that all tokens were implemented. | |
65 // TODO(azani): Error out on octal. | |
66 }; | |
67 | |
68 struct Token { | |
69 Token(); | |
70 ~Token(); | |
71 | |
72 bool error() const { | |
73 return (token_type == TokenType::ERROR_ILLEGAL_CHAR || | |
74 token_type == TokenType::ERROR_UNTERMINATED_STRING_LITERAL || | |
75 token_type == TokenType::ERROR_UNKNOWN); | |
76 } | |
77 | |
78 TokenType token_type; | |
79 std::string token; | |
80 size_t char_pos; | |
81 size_t line_no; | |
82 size_t line_pos; | |
83 }; | |
84 | |
85 // Accepts the text of a mojom file and returns the ordered list of tokens | |
86 // found in the file. | |
87 std::vector<Token> Tokenize(const std::string& source); | |
88 | |
89 } // namespace mojom | |
90 } // namespace mojo | |
91 | |
92 #endif // MOJO_PUBLIC_TOOLS_BINDINGS_MOJOM_CPP_LEXER_H_ | |
OLD | NEW |