/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.
* Use of this file is governed by the BSD 3-clause license that
* can be found in the LICENSE.txt file in the project root.
*/
#pragma once
#include "antlr4-common.h"
namespace antlr4 {
namespace dfa {
/// This class provides a default implementation of the
/// interface.
class ANTLR4CPP_PUBLIC Vocabulary final {
public:
/// Gets an empty instance.
///
///
/// No literal or symbol names are assigned to token types, so
/// returns the numeric value for all tokens
/// except .
[[deprecated("Use the default constructor of Vocabulary instead.")]] static const Vocabulary EMPTY_VOCABULARY;
Vocabulary() {}
Vocabulary(const Vocabulary&) = default;
///
/// Constructs a new instance of from the specified
/// literal and symbolic token names.
///
/// The literal names assigned to tokens, or {@code null}
/// if no literal names are assigned.
/// The symbolic names assigned to tokens, or
/// {@code null} if no symbolic names are assigned.
///
///
///
Vocabulary(std::vector literalNames, std::vector symbolicNames);
///
/// Constructs a new instance of from the specified
/// literal, symbolic, and display token names.
///
/// The literal names assigned to tokens, or {@code null}
/// if no literal names are assigned.
/// The symbolic names assigned to tokens, or
/// {@code null} if no symbolic names are assigned.
/// The display names assigned to tokens, or {@code null}
/// to use the values in {@code literalNames} and {@code symbolicNames} as
/// the source of display names, as described in
/// .
///
///
///
///
Vocabulary(std::vector literalNames, std::vector symbolicNames,
std::vector displayNames);
///
/// Returns the highest token type value. It can be used to iterate from
/// zero to that number, inclusively, thus querying all stored entries.
/// the highest token type value
constexpr size_t getMaxTokenType() const { return _maxTokenType; }
///
/// Gets the string literal associated with a token type. The string returned
/// by this method, when not {@code null}, can be used unaltered in a parser
/// grammar to represent this token type.
///
/// The following table shows examples of lexer rules and the literal
/// names assigned to the corresponding token types.
///
///
///
/// Rule |
/// Literal Name |
/// Java String Literal |
///
///
/// {@code THIS : 'this';} |
/// {@code 'this'} |
/// {@code "'this'"} |
///
///
/// {@code SQUOTE : '\'';} |
/// {@code '\''} |
/// {@code "'\\''"} |
///
///
/// {@code ID : [A-Z]+;} |
/// n/a |
/// {@code null} |
///
///
///
/// The token type.
///
/// The string literal associated with the specified token type, or
/// {@code null} if no string literal is associated with the type.
std::string_view getLiteralName(size_t tokenType) const;
///
/// Gets the symbolic name associated with a token type. The string returned
/// by this method, when not {@code null}, can be used unaltered in a parser
/// grammar to represent this token type.
///
/// This method supports token types defined by any of the following
/// methods:
///
///
/// - Tokens created by lexer rules.
/// - Tokens defined in a
tokens{}
block in a lexer or parser
/// grammar.
/// - The implicitly defined {@code EOF} token, which has the token type
/// .
///
///
/// The following table shows examples of lexer rules and the literal
/// names assigned to the corresponding token types.
///
///
///
/// Rule |
/// Symbolic Name |
///
///
/// {@code THIS : 'this';} |
/// {@code THIS} |
///
///
/// {@code SQUOTE : '\'';} |
/// {@code SQUOTE} |
///
///
/// {@code ID : [A-Z]+;} |
/// {@code ID} |
///
///
///
/// The token type.
///
/// The symbolic name associated with the specified token type, or
/// {@code null} if no symbolic name is associated with the type.
std::string_view getSymbolicName(size_t tokenType) const;
///
/// Gets the display name of a token type.
///
/// ANTLR provides a default implementation of this method, but
/// applications are free to override the behavior in any manner which makes
/// sense for the application. The default implementation returns the first
/// result from the following list which produces a non-{@code null}
/// result.
///
///
/// - The result of
/// - The result of
/// - The result of
///
///
/// The token type.
///
/// The display name of the token type, for use in error reporting or
/// other user-visible messages which reference specific token types.
std::string getDisplayName(size_t tokenType) const;
private:
std::vector const _literalNames;
std::vector const _symbolicNames;
std::vector const _displayNames;
const size_t _maxTokenType = 0;
};
} // namespace atn
} // namespace antlr4