Mercurial > repo
view interps/sadol/Source.cpp @ 12518:2d8fe55c6e65 draft default tip
<int-e> learn The password of the month is release incident pilot.
author | HackEso <hackeso@esolangs.org> |
---|---|
date | Sun, 03 Nov 2024 00:31:02 +0000 |
parents | 859f9b4339e6 |
children |
line wrap: on
line source
/* * BDSM2 * Author: Adam Sawicki * http://www.regedit.risp.pl * mailto:regedit@risp.pl */ #include "pch.hpp" #include <sstream> #include "Source.hpp" string Source::Iterator::ToString() const { std::ostringstream ss; ss << "index: " << (unsigned)Index << ", row: " << Row << ", col: " << Col; return ss.str(); } void Source::Forward() { if (Peek() == '\r') { } else if (Peek() == '\n') { m_Index.Row++; m_Index.Col = 1; } else m_Index.Col++; m_Index.Index++; } char Source::Get() { char ch = Peek(); Forward(); return ch; } Source::Source(const string *Src) : m_Src(Src), m_ErrIndexSaved(false) { m_Index.Index = 0; m_Index.Row = 1; m_Index.Col = 1; } char Source::GetS() { if (End()) SrcError("Unexpected end of file", ERR_PARSE); return Get(); } void Source::Skip() { char ch; while (!End()) { ch = Peek(); // Whitespace if (ch == ' ' || ch == '\t' || ch == '\v' || ch == '\r' || ch == '\n') Forward(); // Comment else if (ch == '{') { Forward(); for (;;) { if (End()) SrcError("Unexpected end of comment", ERR_PARSE); ch = Peek(); Forward(); if (ch == '}') break; } } else break; } } void Source::SrcError(const string &msg, ERR_PLACE place) { Error(msg + " (" + GetIterator().ToString() + ')', place); }