/* 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. /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// ///
RuleLiteral NameJava 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. /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// ///
RuleSymbolic 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. /// ///
    ///
  1. The result of
  2. ///
  3. The result of
  4. ///
  5. The result of
  6. ///
///
/// 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