/* 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 { public: Vocabulary(Vocabulary const&) = default; virtual ~Vocabulary(); /// Gets an empty instance. /// /// /// No literal or symbol names are assigned to token types, so /// returns the numeric value for all tokens /// except . static const Vocabulary EMPTY_VOCABULARY; Vocabulary() {} /// /// 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(const std::vector &literalNames, const 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(const std::vector &literalNames, const std::vector &symbolicNames, const std::vector &displayNames); /// /// Returns a instance from the specified set of token /// names. This method acts as a compatibility layer for the single /// {@code tokenNames} array generated by previous releases of ANTLR. /// /// The resulting vocabulary instance returns {@code null} for /// and , and the /// value from {@code tokenNames} for the display names. /// /// The token names, or {@code null} if no token names are /// available. /// A instance which uses {@code tokenNames} for /// the display names of tokens. static Vocabulary fromTokenNames(const std::vector &tokenNames); /// /// 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 virtual size_t getMaxTokenType() const; /// /// 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. virtual std::string 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. virtual std::string 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. virtual 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