Support break statements
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2019-06-27 15:55:46 +02:00
parent 46197e0a6e
commit 3367e60ae5
8 changed files with 80 additions and 9 deletions

View File

@@ -22,7 +22,8 @@ namespace Porygon::Parser {
Return,
Conditional,
NumericalFor,
GenericFor
GenericFor,
Break
};
class ParsedStatement {
@@ -59,6 +60,15 @@ namespace Porygon::Parser {
}
};
class ParsedBreakStatement : public ParsedStatement{
public:
ParsedBreakStatement(unsigned int start, unsigned int length) : ParsedStatement(start, length) {};
const ParsedStatementKind GetKind() const final {
return ParsedStatementKind::Break;
}
};
class ParsedBlockStatement : public ParsedStatement {
const std::vector<const ParsedStatement *> _statements;
public:

View File

@@ -45,7 +45,9 @@ namespace Porygon::Parser {
case TokenKind::IfKeyword:
return this->ParseIfStatement(current);
case TokenKind ::ForKeyword:
return this->ParseForStatement(current);
return this->ParseForStatement();
case TokenKind ::BreakKeyword:
return new ParsedBreakStatement(current->GetStartPosition(), current -> GetLength());
default:
break;
}
@@ -225,7 +227,7 @@ namespace Porygon::Parser {
return new ParsedConditionalStatement(condition, block, start, block->GetEndPosition() - start);
}
ParsedStatement *Parser::ParseForStatement(const IToken *current) {
ParsedStatement *Parser::ParseForStatement() {
auto identifier = this -> Next();
if (this -> Peek()->GetKind() == TokenKind::AssignmentToken){
return ParseNumericForStatement(identifier);

View File

@@ -45,7 +45,7 @@ namespace Porygon::Parser {
ParsedStatement *ParseIfStatement(const IToken *current);
ParsedStatement *ParseForStatement(const IToken *current);
ParsedStatement *ParseForStatement();
ParsedStatement *ParseNumericForStatement(const IToken *current);
ParsedStatement *ParseGenericForStatement(const IToken *current);