X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Utils%2FConsole%2FParse.hh;h=691d549f354dbb603bcfc03da913dddaf1c1671f;hb=f2f5d59e83863f3b513950173baee1b6da2aee3c;hp=5e8b0ac84d0c09154254dd841bae52cb503f36a2;hpb=0461eef93912cb9d454d726b4a7b4ccf50ed31bd;p=senf.git diff --git a/Utils/Console/Parse.hh b/Utils/Console/Parse.hh index 5e8b0ac..691d549 100644 --- a/Utils/Console/Parse.hh +++ b/Utils/Console/Parse.hh @@ -205,6 +205,8 @@ namespace senf { namespace console { + namespace detail { class FilePositionWithIndex; } + namespace detail { struct ParserAccess; } /** \brief Single argument token @@ -253,7 +255,10 @@ namespace console { }; Token(); ///< Create empty token - Token(TokenType type, std::string token); ///< Create token with given type and value + Token(TokenType type, std::string token); + ///< Create token with given type and value + Token(TokenType type, std::string token, detail::FilePositionWithIndex const & pos); + ///< Create token with given type and value std::string const & value() const; ///< String value of token @@ -261,6 +266,10 @@ namespace console { TokenType type() const; ///< Token type + unsigned line() const; ///< Line number of token in source + unsigned column() const; ///< Column number of token in source + unsigned index() const; ///< Index (char count) of token in source + bool is(unsigned tokens) const; ///< Check, whether tokens type matches \a tokens /**< \a tokens is a bit-mask of token types to check. */ @@ -272,6 +281,9 @@ namespace console { private: TokenType type_; std::string token_; + unsigned line_; + unsigned column_; + unsigned index_; }; std::ostream & operator<<(std::ostream & os, Token const & token); @@ -615,6 +627,12 @@ namespace console { to be terminated explicitly. This means, that the last ';' is \e not optional in this case. */ + static bool isSpecialChar(char ch); ///< Check, if \a ch is a special character + static bool isPunctuationChar(char ch); ///< Check, if \a ch is a punctuation character + static bool isSpaceChar(char ch); ///< Check, if \a ch is a space character + static bool isInvalidChar(char ch); ///< Check, if \a ch is an invalid character + static bool isWordChar(char ch); ///< Check, if \a ch is a word character + /** \brief Exception thrown when the parser detects an error */ struct ParserErrorException : public SyntaxErrorException { explicit ParserErrorException(std::string const & msg) : SyntaxErrorException(msg) {} };