Skip to content

Commit

Permalink
translator: changed get expression to throw errors
Browse files Browse the repository at this point in the history
removed return value
removed temporary creation of error tokens
removed done status enumerator since it is no longer used

changed detection of unary operator errors: when get expression finds an
unexpected unary operator, it throw an "expected binary operator or
end-of-statement" error; callers previously checked if the token was a
unary operator to report the appropriate error, but now that get
expression throws this error, no token is returned so now callers must
specifically check for this error and throw the appropriate error
  • Loading branch information
thunder422 committed Nov 27, 2014
1 parent 217de6d commit 697a0d2
Show file tree
Hide file tree
Showing 7 changed files with 106 additions and 158 deletions.
15 changes: 8 additions & 7 deletions basic/input.cpp
Expand Up @@ -32,22 +32,23 @@
void inputTranslate(Translator &translator, TokenPtr commandToken,
TokenPtr &token)
{
Status status;

if (commandToken->isCode(Input_Code))
{
token = translator.table().newToken(InputBegin_Code);
}
else // InputPrompt_Code
{
status = translator.getExpression(token, DataType::String);
if (status != Status::Done)
try
{
translator.getExpression(token, DataType::String);
}
catch (TokenError &error)
{
if (status == Status::UnknownToken)
if (error(Status::UnknownToken))
{
status = Status::ExpSemiOrComma;
error = Status::ExpSemiOrComma;
}
throw TokenError {status, token};
throw;
}
translator.doneStackPop();
if (token->isCode(Comma_Code))
Expand Down
13 changes: 8 additions & 5 deletions basic/let.cpp
Expand Up @@ -32,7 +32,6 @@
void letTranslate(Translator &translator, TokenPtr commandToken,
TokenPtr &token)
{
Status status;
int column;
bool hidden;
bool done;
Expand Down Expand Up @@ -134,13 +133,17 @@ void letTranslate(Translator &translator, TokenPtr commandToken,
while (!done);

// get expression for value to assign
if ((status = translator.getExpression(token, dataType)) != Status::Done)
try
{
if (status == Status::UnknownToken)
translator.getExpression(token, dataType);
}
catch (TokenError &error)
{
if (error(Status::UnknownToken))
{
throw TokenError {Status::ExpOpOrEnd, token};
error = Status::ExpOpOrEnd;
}
throw TokenError {status, token};
throw;
}

// check terminating token for end-of-statement
Expand Down
18 changes: 10 additions & 8 deletions basic/print.cpp
Expand Up @@ -33,34 +33,36 @@
void printTranslate(Translator &translator, TokenPtr commandToken,
TokenPtr &token)
{
Status status;
TokenPtr lastSemiColon;
bool separator {};
bool printFunction {};

forever
{
if ((status = translator.getExpression(token, DataType::None))
!= Status::Done)
try
{
if (status == Status::UnknownToken)
translator.getExpression(token, DataType::None);
}
catch (TokenError &error)
{
if (error(Status::UnknownToken))
{
if (translator.doneStackEmpty())
{
status = Status::ExpExprCommaPfnOrEnd;
error = Status::ExpExprCommaPfnOrEnd;
}
// change parser error if not inside paren
else if (translator.doneStackTopToken()
->isDataType(DataType::None))
{
status = Status::ExpSemiCommaOrEnd;
error = Status::ExpSemiCommaOrEnd;
}
else // not a print function
{
status = Status::ExpOpSemiCommaOrEnd;
error = Status::ExpOpSemiCommaOrEnd;
}
}
throw TokenError {status, token};
throw;
}

if (!translator.doneStackEmpty())
Expand Down
1 change: 0 additions & 1 deletion ibcp.h
Expand Up @@ -34,7 +34,6 @@
// parser and translator status codes
enum class Status
{
Done,
ExpCmdOrAssignItem,
ExpExpr,
ExpExprOrEnd,
Expand Down
2 changes: 0 additions & 2 deletions statusmessage.cpp
Expand Up @@ -30,8 +30,6 @@ const QString StatusMessage::text(Status status)
{
switch (status)
{
case Status::Done:
return tr("Done_TokenStatus (BUG)");
case Status::ExpCmdOrAssignItem:
return tr("expected command or item for assignment");
case Status::ExpExpr:
Expand Down

0 comments on commit 697a0d2

Please sign in to comment.