Splitting out CharStream from Scanner.

This commit is contained in:
Christian Parpart
2018-11-21 18:58:36 +00:00
committed by Alex Beregszaszi
parent 87821c53c3
commit 2518b5314c
4 changed files with 216 additions and 81 deletions
+1 -31
View File
@@ -54,6 +54,7 @@
#include <libdevcore/Common.h>
#include <libdevcore/CommonData.h>
#include <liblangutil/CharStream.h>
#include <liblangutil/SourceLocation.h>
#include <liblangutil/Token.h>
@@ -62,41 +63,10 @@ namespace dev
namespace solidity
{
class AstRawString;
class AstValueFactory;
class ParserRecorder;
class CharStream
{
public:
CharStream(): m_position(0) {}
explicit CharStream(std::string const& _source): m_source(_source), m_position(0) {}
int position() const { return m_position; }
bool isPastEndOfInput(size_t _charsForward = 0) const { return (m_position + _charsForward) >= m_source.size(); }
char get(size_t _charsForward = 0) const { return m_source[m_position + _charsForward]; }
char advanceAndGet(size_t _chars = 1);
char rollback(size_t _amount);
void reset() { m_position = 0; }
std::string const& source() const { return m_source; }
///@{
///@name Error printing helper functions
/// Functions that help pretty-printing parse errors
/// Do only use in error cases, they are quite expensive.
std::string lineAtPosition(int _position) const;
std::tuple<int, int> translatePositionToLineColumn(int _position) const;
///@}
private:
std::string m_source;
size_t m_position;
};
class Scanner
{
friend class LiteralScope;