diff options
Diffstat (limited to 'src/include')
-rw-r--r-- | src/include/open-axiom/InputFragment | 7 | ||||
-rw-r--r-- | src/include/open-axiom/SourceInput | 54 |
2 files changed, 57 insertions, 4 deletions
diff --git a/src/include/open-axiom/InputFragment b/src/include/open-axiom/InputFragment index 7f317973..65f3dfc9 100644 --- a/src/include/open-axiom/InputFragment +++ b/src/include/open-axiom/InputFragment @@ -1,5 +1,5 @@ // -*- C++ -*- -// Copyright (C) 2014, Gabriel Dos Reis. +// Copyright (C) 2014-2015, Gabriel Dos Reis. // All rights reserved. // Written by Gabriel Dos Reis. // @@ -42,9 +42,8 @@ namespace OpenAxiom { // A physical line is just raw text, coupled with location // information such as line and indentation column. struct Line : std::string { - LineNumber number; - ColumnIndex indent; - Line() : number(), indent() { } + LineNumber number { }; + ColumnIndex indent { }; std::string sub_string(ColumnIndex s, ColumnIndex e) const { return substr(s, e - s); diff --git a/src/include/open-axiom/SourceInput b/src/include/open-axiom/SourceInput new file mode 100644 index 00000000..efb4ab8b --- /dev/null +++ b/src/include/open-axiom/SourceInput @@ -0,0 +1,54 @@ +// -*- C++ -*- +// Copyright (C) 2014-2015, Gabriel Dos Reis. +// All rights reserved. +// Written by Gabriel Dos Reis. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// - Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// - Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in +// the documentation and/or other materials provided with the +// distribution. +// +// - Neither the name of OpenAxiom, nor the names of its contributors may +// be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +// IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +// PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER +// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#ifndef OPENAXIOM_SOURCEINPUT_included +#define OPENAXIOM_SOURCEINPUT_included + +#include <iosfwd> +#include <open-axiom/InputFragment> + +namespace OpenAxiom { + // -- A source input transform a character stream into a program fragment + // -- stream, delivering a fragment one at a time. + struct SourceInput { + SourceInput(std::istream& is) : input(is) { } + // Return the next program fragment from this input source. + Fragment get(); + + private: + std::istream& input; + Line line; + }; +} + +#endif // OPENAXIOM_SOURCEINPUT_included |