void ParseExpression(LispPtr& aResult, const LispChar* aString,LispEnvironment& aEnvironment) { LispString full(aString); full.push_back(';'); StringInput input(full,aEnvironment.iInputStatus); aEnvironment.iInputStatus.SetTo("String"); LispTokenizer &tok = *aEnvironment.iCurrentTokenizer; InfixParser parser(tok, input, aEnvironment, aEnvironment.PreFix(), aEnvironment.InFix(), aEnvironment.PostFix(), aEnvironment.Bodied()); parser.Parse(aResult); }
void PrintExpression(LispString& aResult, LispPtr& aExpression, LispEnvironment& aEnvironment, std::size_t aMaxChars) { std::ostringstream stream; InfixPrinter infixprinter(aEnvironment.PreFix(), aEnvironment.InFix(), aEnvironment.PostFix(), aEnvironment.Bodied()); infixprinter.Print(aExpression, stream, aEnvironment); aResult.assign(stream.str()); if (aMaxChars > 0 && aResult.size()>aMaxChars) { aResult.resize(aMaxChars - 3); aResult += "..."; } }
void InternalEvalString(LispEnvironment& aEnvironment, LispPtr& aResult, const LispChar* aString) { LispString full(aString); full.push_back(';'); StringInput input(full,aEnvironment.iInputStatus); LispPtr lispexpr; LispTokenizer &tok = *aEnvironment.iCurrentTokenizer; InfixParser parser(tok, input, aEnvironment, aEnvironment.PreFix(), aEnvironment.InFix(), aEnvironment.PostFix(), aEnvironment.Bodied()); parser.Parse(lispexpr); aEnvironment.iEvaluator->Eval(aEnvironment, aResult, lispexpr); }
void DoInternalLoad(LispEnvironment& aEnvironment,LispInput* aInput) { LispLocalInput localInput(aEnvironment, aInput); // TODO make "EndOfFile" a global thing // read-parse-eval to the end of file const LispString* eof = aEnvironment.HashTable().LookUp("EndOfFile"); bool endoffile = false; LispTokenizer tok; InfixParser parser(tok, *aEnvironment.CurrentInput(), aEnvironment, aEnvironment.PreFix(), aEnvironment.InFix(), aEnvironment.PostFix(), aEnvironment.Bodied()); while (!endoffile) { LispPtr readIn; // Read expression parser.Parse(readIn); if (!readIn) throw LispErrReadingFile(); // Check for end of file if (readIn->String() == eof) { endoffile = true; } // Else evaluate else { LispPtr result; aEnvironment.iEvaluator->Eval(aEnvironment, result, readIn); } } }