Mercurial > repo
view interps/sadol/Source.cpp @ 12298:cea93c2c666a draft
<b_jonas> learn Burlesque is only the sexiest language on Earth. mroman created it for finance analysis because the traditionally used K and Dyalog APL are unreadable. (See: http://mroman.ch/burlesque )
author | HackEso <hackeso@esolangs.org> |
---|---|
date | Sat, 04 Jan 2020 22:50:21 +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); }