CForStatement::CForStatement(tokenItor &itor)
{
	Expect(For, *itor++);
	m_init = StatementPtr(new CAssignmentStatement(itor));			//초기식
	Expect(To, *itor++);
	m_condition = CExpression::Parse(itor);					//조건식
	Expect(Step, *itor++);
	m_increment = StatementPtr(new CAssignmentStatement(itor));			//증감문

	m_statement = StatementPtr(CStatement::Create(itor));
}
CIfStatement::CIfStatement(tokenItor &itor) : ifStatement(nullptr), elseStatement(nullptr)
{
	Expect(If, *itor++);
	m_expression = CExpression::Parse(itor);
	ifStatement = StatementPtr(CStatement::Create(itor));
	
	if (itor->token == Else)
	{
		itor++;
		elseStatement = StatementPtr(CStatement::Create(itor));
	}
}
Ejemplo n.º 3
0
FileScope::FileScope(const string &fileName, int fileSize, const MD5 &md5)
  : BlockScope("", "", StatementPtr(), BlockScope::FileScope),
    m_size(fileSize), m_md5(md5), m_system(false),
    m_isHHFile(false), m_preloadPriority(0),
    m_fileName(fileName), m_redeclaredFunctions(0) {
  pushAttribute(); // for global scope
}
Ejemplo n.º 4
0
StatementPtr Parser::parseStatement()
{
    if (m_curToken.tokenType() == TokenType::Begin) {
        return parseCompoundStatement();
    } else if (match(TokenType::If)) {
        ExpressionPtr expression = parseExpression();
        if (m_errorCode > ErrorCodes::NoError) {
            panic(statementFollow, statementFollowSize);
            return StatementPtr();
        }

        if (!match(TokenType::Then)) {
            reportError(ErrorCodes::ExpectedThen);

            panic(statementFollow, statementFollowSize);
            return StatementPtr();
        }

        StatementPtr thenStatement = parseStatement();
        if (m_errorCode > ErrorCodes::NoError) {
            panic(statementFollow, statementFollowSize);
            return StatementPtr();
        }

        if (!match(TokenType::Else)) {
            reportError(ErrorCodes::ExpectedElse);

            panic(statementFollow, statementFollowSize);
            return StatementPtr();
        }

        StatementPtr elseStatement = parseStatement();
        if (m_errorCode > ErrorCodes::NoError) {
            panic(statementFollow, statementFollowSize);
            return StatementPtr();
        }

        IfStatementPtr statement(new IfStatement);
        statement->expression = expression;
        statement->thenPart = thenStatement;
        statement->elsePart = elseStatement;

        return statement;
    } else if (match(TokenType::While)) {
        ExpressionPtr expression = parseExpression();
        if (m_errorCode > ErrorCodes::NoError) {
            panic(statementFollow, statementFollowSize);
            return StatementPtr();
        }

        if (!match(TokenType::Do)) {
            reportError(ErrorCodes::ExpectedDo);

            panic(statementFollow, statementFollowSize);
            return StatementPtr();
        }

        StatementPtr doPart = parseStatement();
        if (m_errorCode > ErrorCodes::NoError) {
            panic(statementFollow, statementFollowSize);
            return StatementPtr();
        }

        WhileStatementPtr whileStatement(new WhileStatement);
        whileStatement->expression = expression;
        whileStatement->doPart = doPart;

        return whileStatement;
    }

    IdentifierPtr identifier = parseIdentifier();
    if (m_errorCode > ErrorCodes::NoError) {
        panic(statementFollow, statementFollowSize);
        return StatementPtr();
    }

    AssignmentOrCallStatementPtr statement(new AssignmentOrCallStatement);
    statement->id = identifier;

    parseStatement_p(statement);
    if (m_errorCode > ErrorCodes::NoError) {
        panic(statementFollow, statementFollowSize);
        return StatementPtr();
    }

    return statement;
}
CWhileStatement::CWhileStatement(tokenItor &itor)
{
	Expect(While, *itor++);
	m_expression = CExpression::Parse(itor);
	m_statement = StatementPtr(CStatement::Create(itor));
}
Ejemplo n.º 6
0
StatementPtr TypedefStatement::clone() {
  return StatementPtr(new TypedefStatement(*this));
}