aboutsummaryrefslogtreecommitdiff
path: root/src/syntax
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2013-06-27 17:34:51 +0000
committerdos-reis <gdr@axiomatics.org>2013-06-27 17:34:51 +0000
commitb52f0164b18f06db386d527be26e3a11deb1ab7d (patch)
treee68cb4ebe4afc5ad828e1fc5743a59c91b5dd0ea /src/syntax
parent8c11594887faf3a796729c4185143e1630b69d65 (diff)
downloadopen-axiom-b52f0164b18f06db386d527be26e3a11deb1ab7d.tar.gz
Add small Lisp evaluator for the benefit of new GUI.
Diffstat (limited to 'src/syntax')
-rw-r--r--src/syntax/sexpr.cc58
1 files changed, 13 insertions, 45 deletions
diff --git a/src/syntax/sexpr.cc b/src/syntax/sexpr.cc
index 0a3b8071..6b73d5a0 100644
--- a/src/syntax/sexpr.cc
+++ b/src/syntax/sexpr.cc
@@ -148,11 +148,6 @@ namespace OpenAxiom {
// -- AtomSyntax --
AtomSyntax::AtomSyntax(const Lexeme& t) : lex(t) { }
- void
- AtomSyntax::accept(Visitor& v) const {
- v.visit(*this);
- }
-
// -- IntegerSyntax --
IntegerSyntax::IntegerSyntax(const Lexeme& t) : AtomSyntax(t) { }
@@ -195,13 +190,13 @@ namespace OpenAxiom {
v.visit(*this);
}
- // -- Reference --
- Reference::Reference(const Lexeme& t, Ordinal n)
+ // -- ReferenceSyntax --
+ ReferenceSyntax::ReferenceSyntax(const Lexeme& t, Ordinal n)
: AtomSyntax(t), pos(n)
{ }
void
- Reference::accept(Visitor& v) const {
+ ReferenceSyntax::accept(Visitor& v) const {
v.visit(*this);
}
@@ -259,42 +254,6 @@ namespace OpenAxiom {
v.visit(*this);
}
- // ---------------------
- // -- Syntax::Visitor --
- // ---------------------
-
- // implicitly convert a reference to `T' to a reference to `S'.
- template<typename S, typename T>
- inline const S&
- as(const T& t) {
- return t;
- }
-
- void
- Syntax::Visitor::visit(const IntegerSyntax& i) {
- visit(as<AtomSyntax>(i));
- }
-
- void
- Syntax::Visitor::visit(const CharacterSyntax& c) {
- visit(as<AtomSyntax>(c));
- }
-
- void
- Syntax::Visitor::visit(const StringSyntax& s) {
- visit(as<AtomSyntax>(s));
- }
-
- void
- Syntax::Visitor::visit(const SymbolSyntax& s) {
- visit(as<AtomSyntax>(s));
- }
-
- void
- Syntax::Visitor::visit(const Reference& r) {
- visit(as<AtomSyntax>(r));
- }
-
// ---------------
// -- Allocator --
// ---------------
@@ -325,7 +284,7 @@ namespace OpenAxiom {
return syms.make(t, k);
}
- const Reference*
+ const ReferenceSyntax*
Allocator::make_reference(size_t i, const Lexeme& t) {
return refs.make(t, i);
}
@@ -672,5 +631,14 @@ namespace OpenAxiom {
return read_sexpr(st);
}
+ const Byte*
+ Reader::position(Ordinal p) {
+ st.cur = st.start + p;
+ st.line = st.cur;
+ // while (st.line > st.start and st.line[-1] != '\n')
+ // --st.line;
+ return st.cur;
+ }
+
}
}