Skip to content

Commit

Permalink
parser: removed data type from errors
Browse files Browse the repository at this point in the history
removed setting of token data type since returned status alone can be
used to determine a numeric constant error when status is not unknown
token

changed method how translator detects parser error type from checking
for 'parser' error along with data type (double for numeric, none for
non-numeric) to just checking for unknown token (if not then numeric
constant error)

changed translator get token function to return status returned from
parser (unknown token or numeric constant error) instead of generic
'parser' error status

removed check for parser error from translator get operand function for
references since get token function only returns parser errors

moved unary operator check in translator process internal function
routine to before error check so that when a unary operator is present
(also an error), it needs gets passed further down where an updated
error is determined

removed no longer used 'parser' error status
  • Loading branch information
thunder422 committed Oct 24, 2014
1 parent 5690b1b commit ae9e976
Show file tree
Hide file tree
Showing 8 changed files with 17 additions and 35 deletions.
2 changes: 1 addition & 1 deletion basic/input.cpp
Expand Up @@ -45,7 +45,7 @@ Status inputTranslate(Translator &translator, TokenPtr commandToken,
status = translator.getExpression(token, DataType::String);
if (status != Status::Done)
{
if (status == Status::Parser && token->isDataType(DataType::None))
if (status == Status::UnknownToken)
{
status = Status::ExpSemiOrComma;
}
Expand Down
2 changes: 1 addition & 1 deletion basic/let.cpp
Expand Up @@ -135,7 +135,7 @@ Status letTranslate(Translator &translator, TokenPtr commandToken,
// get expression for value to assign
if ((status = translator.getExpression(token, dataType)) != Status::Done)
{
if (status == Status::Parser && token->isDataType(DataType::None))
if (status == Status::UnknownToken)
{
status = Status::ExpOpOrEnd;
}
Expand Down
3 changes: 1 addition & 2 deletions basic/print.cpp
Expand Up @@ -43,8 +43,7 @@ Status printTranslate(Translator &translator, TokenPtr commandToken,
if ((status = translator.getExpression(token, DataType::None))
!= Status::Done)
{
if (status == Status::Parser
&& token->isDataType(DataType::None))
if (status == Status::UnknownToken)
{
if (translator.doneStackEmpty())
{
Expand Down
1 change: 0 additions & 1 deletion ibcp.h
Expand Up @@ -36,7 +36,6 @@ enum class Status
{
Good,
Done,
Parser,
ExpCmd,
ExpExpr,
ExpExprOrEnd,
Expand Down
2 changes: 1 addition & 1 deletion parser.cpp
Expand Up @@ -55,7 +55,7 @@ TokenPtr Parser::operator()(Number number)
&& !getString() && !getOperator())
{
// not a valid token, create error token
setError(Status::UnknownToken, DataType::None);
setError(Status::UnknownToken);
}
return std::move(m_token); // token may contain an error
}
Expand Down
5 changes: 1 addition & 4 deletions parser.h
Expand Up @@ -55,27 +55,24 @@ class Parser
bool getOperator(void);

// set token error function
void setError(Status status, DataType dataType = DataType::Double)
void setError(Status status)
{
m_errorStatus = status;
m_token->setType(Token::Type::Error);
m_token->setLength(1);
m_token->setDataType(dataType);
}
void setErrorColumn(Status status, int column)
{
m_errorStatus = status;
m_token->setType(Token::Type::Error);
// assumes length=1, specifies alternate column
m_token->setLength(-column);
m_token->setDataType(DataType::Double);
}
void setErrorLength(Status status, int len)
{
m_errorStatus = status;
m_token->setType(Token::Type::Error);
m_token->setLength(len);
m_token->setDataType(DataType::Double);
}

// support functions
Expand Down
2 changes: 0 additions & 2 deletions statusmessage.cpp
Expand Up @@ -34,8 +34,6 @@ const QString StatusMessage::text(Status status)
return tr("Good_TokenStatus (BUG)");
case Status::Done:
return tr("Done_TokenStatus (BUG)");
case Status::Parser:
return tr("Parser_TokenStatus (BUG)");
case Status::ExpCmd:
return tr("expected command");
case Status::ExpExpr:
Expand Down
35 changes: 12 additions & 23 deletions translator.cpp
Expand Up @@ -61,8 +61,7 @@ RpnList Translator::translate(const QString &input, TestMode testMode)
{
status = getExpression(token, DataType::Any);

if (status == Status::Parser
&& token->isDataType(DataType::None))
if (status == Status::UnknownToken)
{
status = Status::ExpOpOrEnd;
}
Expand Down Expand Up @@ -117,8 +116,7 @@ RpnList Translator::translate(const QString &input, TestMode testMode)
if (status != Status::Done)
{
m_output.setError(token);
m_output.setErrorStatus(status == Status::Parser
? m_parse->errorStatus() : status);
m_output.setErrorStatus(status);
cleanUp();
}
m_parse.reset();
Expand Down Expand Up @@ -228,8 +226,7 @@ Status Translator::getExpression(TokenPtr &token, DataType dataType, int level)
{
status = Status::ExpBinOpOrParen;
}
if (status == Status::Parser
&& token->isDataType(DataType::None))
if (status == Status::UnknownToken)
{
status = Status::ExpOpOrParen;
}
Expand Down Expand Up @@ -381,10 +378,8 @@ Status Translator::getOperand(TokenPtr &token, DataType dataType,
// if parser error then caller needs to handle it
return status;
}
if (status == Status::Parser)
{
token->setLength(1); // only report error at first char of token
}
// for reference operands, only report error at first char of token
token->setLength(1);
return expectedErrStatus(dataType, reference);
}

Expand Down Expand Up @@ -564,7 +559,7 @@ Status Translator::getToken(TokenPtr &token, DataType dataType)
else
{
// caller needs to convert this error to the appropriate error
return Status::Parser;
return m_parse->errorStatus();
}
}
return Status::Good;
Expand Down Expand Up @@ -678,22 +673,17 @@ Status Translator::processInternalFunction(TokenPtr &token)
}
}
}
else if (status == Status::Parser)
{
if (token->isDataType(DataType::Double))
{
return status; // return parser error
}
}
else if (m_table.isUnaryOperator(token))
{
// status will be set to an error for a unary operator
// need to pass to below to determine appropriate error
unaryOperator = true;
}
else
else if (status != Status::UnknownToken)
{
return status;
return status; // return all other errors except unknown token
}
// pass other parser errors and unary operators to error code below
// code below determines error for unknown and unary operator tokens

// check terminating token
if (token->isCode(Comma_Code))
Expand Down Expand Up @@ -812,8 +802,7 @@ Status Translator::processParenToken(TokenPtr &token)
{
if ((status = getExpression(token, dataType)) != Status::Done)
{
if (status == Status::Parser
&& token->isDataType(DataType::None))
if (status == Status::UnknownToken)
{
status = Status::ExpOpCommaOrParen;
}
Expand Down

0 comments on commit ae9e976

Please sign in to comment.