Parse if/else expressions
This commit is contained in:
parent
790f1ca6be
commit
47ca7b98c6
|
@ -113,12 +113,36 @@ func (this *Parser) parseVariableOrDeclaration () (entity.Expression, error) {
|
|||
}
|
||||
|
||||
func (this *Parser) parseIfElse () (*entity.IfElse, error) {
|
||||
// TODO
|
||||
panic(this.bug())
|
||||
err := this.expectValue(lexer.Ident, "if")
|
||||
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) {
|
||||
err := this.expectDesc("Loop", lexer.Ident)
|
||||
err := this.expectValue(lexer.Ident, "loop")
|
||||
if err != nil { return nil, err }
|
||||
pos := this.pos()
|
||||
|
||||
|
|
Loading…
Reference in New Issue