| Index: mojom/lexer.h
|
| diff --git a/mojom/lexer.h b/mojom/lexer.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..b477a37107bd24aa379d93ea5e740f9d1a0f2396
|
| --- /dev/null
|
| +++ b/mojom/lexer.h
|
| @@ -0,0 +1,92 @@
|
| +// Copyright 2015 The Chromium 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 MOJO_PUBLIC_TOOLS_BINDINGS_MOJOM_CPP_LEXER_H_
|
| +#define MOJO_PUBLIC_TOOLS_BINDINGS_MOJOM_CPP_LEXER_H_
|
| +
|
| +#include <cstddef>
|
| +#include <string>
|
| +#include <vector>
|
| +
|
| +#include "base/macros.h"
|
| +
|
| +namespace mojo {
|
| +namespace mojom {
|
| +
|
| +enum class TokenType {
|
| + // Errors
|
| + ERROR_UNKNOWN,
|
| + ERROR_ILLEGAL_CHAR,
|
| + ERROR_UNTERMINATED_STRING_LITERAL,
|
| +
|
| + // Punctuators and Separators
|
| + LPAREN,
|
| + RPAREN,
|
| + LBRACKET,
|
| + RBRACKET,
|
| + LBRACE,
|
| + RBRACE,
|
| + LANGLE,
|
| + RANGLE,
|
| + SEMI,
|
| + COMMA,
|
| + DOT,
|
| + MINUS,
|
| + PLUS,
|
| + AMP,
|
| + QSTN,
|
| + EQUALS,
|
| + RESPONSE,
|
| +
|
| + // Identifiers
|
| + IDENTIFIER,
|
| +
|
| + // Keywords
|
| + IMPORT,
|
| + MODULE,
|
| + STRUCT,
|
| + UNION,
|
| + INTERFACE,
|
| + ENUM,
|
| + CONST,
|
| + TRUE,
|
| + FALSE,
|
| + DEFAULT,
|
| +
|
| + // Constants
|
| + INT_CONST_DEC,
|
| + INT_CONST_HEX,
|
| + FLOAT_CONST,
|
| + ORDINAL,
|
| + STRING_LITERAL,
|
| +
|
| + // TODO(azani): Check that all tokens were implemented.
|
| + // TODO(azani): Error out on octal.
|
| +};
|
| +
|
| +struct Token {
|
| + Token();
|
| + ~Token();
|
| +
|
| + bool error() const {
|
| + return (token_type == TokenType::ERROR_ILLEGAL_CHAR ||
|
| + token_type == TokenType::ERROR_UNTERMINATED_STRING_LITERAL ||
|
| + token_type == TokenType::ERROR_UNKNOWN);
|
| + }
|
| +
|
| + TokenType token_type;
|
| + std::string token;
|
| + size_t char_pos;
|
| + size_t line_no;
|
| + size_t line_pos;
|
| +};
|
| +
|
| +// Accepts the text of a mojom file and returns the ordered list of tokens
|
| +// found in the file.
|
| +std::vector<Token> Tokenize(const std::string& source);
|
| +
|
| +} // namespace mojom
|
| +} // namespace mojo
|
| +
|
| +#endif // MOJO_PUBLIC_TOOLS_BINDINGS_MOJOM_CPP_LEXER_H_
|
|
|