Parse if/else expressions

This commit is contained in:
Sasha Koshka 2024-02-07 18:25:42 -05:00
parent 790f1ca6be
commit 47ca7b98c6

View File

@ -113,12 +113,36 @@ func (this *Parser) parseVariableOrDeclaration () (entity.Expression, error) {
} }
func (this *Parser) parseIfElse () (*entity.IfElse, error) { func (this *Parser) parseIfElse () (*entity.IfElse, error) {
// TODO err := this.expectValue(lexer.Ident, "if")
panic(this.bug()) if err != nil { return nil, err }
ifElse := &entity.IfElse {
Position: this.pos(),
}
err = this.expectNextDesc("Condition", startTokensExpression...)
if err != nil { return nil, err }
ifElse.Condition, err = this.parseExpression()
if err != nil { return nil, err }
err = this.expectValue(lexer.Ident, "then")
if err != nil { return nil, err }
this.expectNextDesc("Branch expression", startTokensExpression...)
ifElse.True, err = this.parseExpression()
if err != nil { return nil, err }
if this.token.Is(lexer.Ident) && this.token.ValueIs("else") {
// Ident "else": false branch expression
this.expectNextDesc("Branch expression", startTokensExpression...)
ifElse.False, err = this.parseExpression()
if err != nil { return nil, err }
}
return ifElse, nil
} }
func (this *Parser) parseLoop () (*entity.Loop, error) { func (this *Parser) parseLoop () (*entity.Loop, error) {
err := this.expectDesc("Loop", lexer.Ident) err := this.expectValue(lexer.Ident, "loop")
if err != nil { return nil, err } if err != nil { return nil, err }
pos := this.pos() pos := this.pos()