Re-organize the position of parsing functions in expression.go

This commit is contained in:
Sasha Koshka 2024-02-08 00:16:39 -05:00
parent a0a155c7e6
commit 5fad8a79dd
1 changed files with 58 additions and 59 deletions

View File

@ -152,42 +152,6 @@ func (this *Parser) parseExpressionRootLBracketIdent (pos errors.Position) (enti
panic(this.bug())
}
func (this *Parser) parseReturnOrBreakCore (pos errors.Position) (entity.Expression, error) {
err := this.expectValue(lexer.Ident, "break", "return")
if err != nil { return nil, err }
name := this.value()
err = this.expectNextDesc (
"expression or end of " + name,
appendCopy(startTokensExpression, lexer.RBracket)...)
if err != nil { return nil, err }
var value entity.Expression
if this.token.Is(startTokensExpression...) {
// startTokensExpression...: value expression
value, err = this.parseExpression()
if err != nil { return nil, err }
}
err = this.expectDesc("end of " + name, lexer.RBracket)
if err != nil { return nil, err }
pos = pos.Union(this.pos())
this.next()
switch name {
case "break":
return &entity.Break {
Position: pos,
Value: value,
}, nil
case "return":
return &entity.Return {
Position: pos,
Value: value,
}, nil
}
panic(this.bug())
}
func (this *Parser) parseDereferenceOrSubscriptCore (pos errors.Position) (entity.Expression, error) {
err := this.expect(lexer.Dot)
if err != nil { return nil, err }
@ -228,6 +192,64 @@ func (this *Parser) parseDereferenceOrSubscriptCore (pos errors.Position) (entit
}
}
var valuesOperator = []string {
"++", "+", "--", "-", "*", "/", "%", "!!", "||", "&&", "^^",
"!", "|", "&", "^", "<<", ">>", "<", ">", "<=", ">=", "=",
}
func (this *Parser) parseExpressionRootLBracketSymbol (pos errors.Position) (entity.Expression, error) {
err := this.expectValueDesc (
"Symbol",
lexer.Symbol,
appendCopy(valuesOperator, "\\", "#", "@", "~", "~~")...)
if err != nil { return nil, err }
switch this.value() {
case "\\": // TODO
case "#": // TODO
case "@": // TODO
case "~": // TODO
case "~~": // TODO
default: // TODO
}
panic(this.bug())
}
func (this *Parser) parseReturnOrBreakCore (pos errors.Position) (entity.Expression, error) {
err := this.expectValue(lexer.Ident, "break", "return")
if err != nil { return nil, err }
name := this.value()
err = this.expectNextDesc (
"expression or end of " + name,
appendCopy(startTokensExpression, lexer.RBracket)...)
if err != nil { return nil, err }
var value entity.Expression
if this.token.Is(startTokensExpression...) {
// startTokensExpression...: value expression
value, err = this.parseExpression()
if err != nil { return nil, err }
}
err = this.expectDesc("end of " + name, lexer.RBracket)
if err != nil { return nil, err }
pos = pos.Union(this.pos())
this.next()
switch name {
case "break":
return &entity.Break {
Position: pos,
Value: value,
}, nil
case "return":
return &entity.Return {
Position: pos,
Value: value,
}, nil
}
panic(this.bug())
}
func (this *Parser) parseCallCore (pos errors.Position) (*entity.Call, error) {
err := this.expect(lexer.Ident)
@ -255,29 +277,6 @@ func (this *Parser) parseCallCore (pos errors.Position) (*entity.Call, error) {
return call, nil
}
var valuesOperator = []string {
"++", "+", "--", "-", "*", "/", "%", "!!", "||", "&&", "^^",
"!", "|", "&", "^", "<<", ">>", "<", ">", "<=", ">=", "=",
}
func (this *Parser) parseExpressionRootLBracketSymbol (pos errors.Position) (entity.Expression, error) {
err := this.expectValueDesc (
"Symbol",
lexer.Symbol,
appendCopy(valuesOperator, "\\", "#", "@", "~", "~~")...)
if err != nil { return nil, err }
switch this.value() {
case "\\": // TODO
case "#": // TODO
case "@": // TODO
case "~": // TODO
case "~~": // TODO
default: // TODO
}
panic(this.bug())
}
func (this *Parser) parseBlock () (*entity.Block, error) {
err := this.expectDesc("Block", lexer.LBrace)
if err != nil { return nil, err }