Beispiel #1
0
SubprogramDeclarationPtr Parser::parseSubprogramDeclaration()
{
    SubprogramDeclarationPtr sub(new SubprogramDeclaration);

    parseSubprogramHead(sub);
    if (m_errorCode > ErrorCodes::NoError) {
        panic(subprogramDeclarationFollow, subprogramDeclarationFollowSize);
        return SubprogramDeclarationPtr();
    }

    DeclarationsPtr declarations = parseDeclarations();
    if (m_errorCode > ErrorCodes::NoError) {
        panic(subprogramDeclarationFollow, subprogramDeclarationFollowSize);
        return SubprogramDeclarationPtr();
    }

    sub->declarations = declarations;

    CompoundStatementPtr body = parseCompoundStatement();
    if (m_errorCode > ErrorCodes::NoError) {
        panic(subprogramDeclarationFollow, subprogramDeclarationFollowSize);
        return SubprogramDeclarationPtr();
    }

    sub->body = body;

    return sub;
}
Beispiel #2
0
void Parser::parseSubprogramDeclaration(){
	parseSubprogramHead();
	parseDeclarations();
	parseCompoundStatement();
	m_code->generate(cd_RETURN, NULL, NULL, NULL);
}