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) {
|
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()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user