mirror of
https://github.com/scp-fs2open/fs2open.github.com.git
synced 2026-11-10 12:41:35 -10:00
This adds an Antlr grammar for parsing argument lists instead of using a hand written parser. This allows to write much more complicated syntax constructs and have all the code being auto-generated. It will also produce a much more correct parser instead of having all those hacks in the hand-written one. This also adds (in addition to supporting the previous syntax) support for function types along with support for them in HTML and JSON output formats. The ANTLR generated parser is included in source form so that it is not necessary to have an ANTLR installation around if you are not going to change the grammar. Also includes the necessary runtime code from Antlr.
93 lines
3.3 KiB
C++
93 lines
3.3 KiB
C++
/* 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 "IntStream.h"
|
|
|
|
namespace antlr4 {
|
|
|
|
/// A token has properties: text, type, line, character position in the line
|
|
/// (so we can ignore tabs), token channel, index, and source from which
|
|
/// we obtained this token.
|
|
class ANTLR4CPP_PUBLIC Token {
|
|
public:
|
|
static const size_t INVALID_TYPE = 0;
|
|
|
|
/// During lookahead operations, this "token" signifies we hit rule end ATN state
|
|
/// and did not follow it despite needing to.
|
|
static const size_t EPSILON = static_cast<size_t>(-2);
|
|
static const size_t MIN_USER_TOKEN_TYPE = 1;
|
|
static const size_t EOF = IntStream::EOF;
|
|
|
|
virtual ~Token();
|
|
|
|
/// All tokens go to the parser (unless skip() is called in that rule)
|
|
/// on a particular "channel". The parser tunes to a particular channel
|
|
/// so that whitespace etc... can go to the parser on a "hidden" channel.
|
|
static const size_t DEFAULT_CHANNEL = 0;
|
|
|
|
/// Anything on different channel than DEFAULT_CHANNEL is not parsed
|
|
/// by parser.
|
|
static const size_t HIDDEN_CHANNEL = 1;
|
|
|
|
/**
|
|
* This is the minimum constant value which can be assigned to a
|
|
* user-defined token channel.
|
|
*
|
|
* <p>
|
|
* The non-negative numbers less than {@link #MIN_USER_CHANNEL_VALUE} are
|
|
* assigned to the predefined channels {@link #DEFAULT_CHANNEL} and
|
|
* {@link #HIDDEN_CHANNEL}.</p>
|
|
*
|
|
* @see Token#getChannel()
|
|
*/
|
|
static const size_t MIN_USER_CHANNEL_VALUE = 2;
|
|
|
|
/// Get the text of the token.
|
|
virtual std::string getText() const = 0;
|
|
|
|
/// Get the token type of the token
|
|
virtual size_t getType() const = 0;
|
|
|
|
/// The line number on which the 1st character of this token was matched, line=1..n
|
|
virtual size_t getLine() const = 0;
|
|
|
|
/// The index of the first character of this token relative to the
|
|
/// beginning of the line at which it occurs, 0..n-1
|
|
virtual size_t getCharPositionInLine() const = 0;
|
|
|
|
/// Return the channel this token. Each token can arrive at the parser
|
|
/// on a different channel, but the parser only "tunes" to a single channel.
|
|
/// The parser ignores everything not on DEFAULT_CHANNEL.
|
|
virtual size_t getChannel() const = 0;
|
|
|
|
/// An index from 0..n-1 of the token object in the input stream.
|
|
/// This must be valid in order to print token streams and
|
|
/// use TokenRewriteStream.
|
|
///
|
|
/// Return INVALID_INDEX to indicate that this token was conjured up since
|
|
/// it doesn't have a valid index.
|
|
virtual size_t getTokenIndex() const = 0;
|
|
|
|
/// The starting character index of the token
|
|
/// This method is optional; return INVALID_INDEX if not implemented.
|
|
virtual size_t getStartIndex() const = 0;
|
|
|
|
/// The last character index of the token.
|
|
/// This method is optional; return INVALID_INDEX if not implemented.
|
|
virtual size_t getStopIndex() const = 0;
|
|
|
|
/// Gets the <seealso cref="TokenSource"/> which created this token.
|
|
virtual TokenSource *getTokenSource() const = 0;
|
|
|
|
/// Gets the <seealso cref="CharStream"/> from which this token was derived.
|
|
virtual CharStream *getInputStream() const = 0;
|
|
|
|
virtual std::string toString() const = 0;
|
|
};
|
|
|
|
} // namespace antlr4
|