Skip to content

Commit 90d3633

Browse files
committed
extract operator expression parsers
1 parent 2100fc2 commit 90d3633

3 files changed

Lines changed: 37 additions & 35 deletions

File tree

docs/architecture.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ Key files:
6363
- `vibes/lexer.go`
6464
- `vibes/parser.go` (parser core initialization + token stream helpers)
6565
- `vibes/parser_errors.go` (parse errors and token labeling)
66-
- `vibes/parser_expressions.go` (expression-level parsing and operators/member/index)
66+
- `vibes/parser_expressions.go` (expression dispatch loop and member/index parsing)
67+
- `vibes/parser_operator_expressions.go` (grouped/prefix/infix/range expression parsing)
6768
- `vibes/parser_yield_literals.go` (`yield` expression argument parsing)
6869
- `vibes/parser_case_literals.go` (case/when/else expression parsing)
6970
- `vibes/parser_call_literals.go` (call argument parsing, keyword labels, and call blocks)

vibes/parser_expressions.go

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -27,40 +27,6 @@ func (p *parser) parseExpression(precedence int) Expression {
2727
return left
2828
}
2929

30-
func (p *parser) parseGroupedExpression() Expression {
31-
p.nextToken()
32-
expr := p.parseExpression(lowestPrec)
33-
if !p.expectPeek(tokenRParen) {
34-
return nil
35-
}
36-
return expr
37-
}
38-
39-
func (p *parser) parsePrefixExpression() Expression {
40-
pos := p.curToken.Pos
41-
operator := p.curToken.Type
42-
p.nextToken()
43-
right := p.parseExpression(precPrefix)
44-
return &UnaryExpr{Operator: operator, Right: right, position: pos}
45-
}
46-
47-
func (p *parser) parseInfixExpression(left Expression) Expression {
48-
pos := p.curToken.Pos
49-
operator := p.curToken.Type
50-
precedence := p.curPrecedence()
51-
p.nextToken()
52-
right := p.parseExpression(precedence)
53-
return &BinaryExpr{Left: left, Operator: operator, Right: right, position: pos}
54-
}
55-
56-
func (p *parser) parseRangeExpression(left Expression) Expression {
57-
pos := p.curToken.Pos
58-
precedence := p.curPrecedence()
59-
p.nextToken()
60-
right := p.parseExpression(precedence)
61-
return &RangeExpr{Start: left, End: right, position: pos}
62-
}
63-
6430
func (p *parser) parseMemberExpression(object Expression) Expression {
6531
if object == nil {
6632
return nil
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package vibes
2+
3+
func (p *parser) parseGroupedExpression() Expression {
4+
p.nextToken()
5+
expr := p.parseExpression(lowestPrec)
6+
if !p.expectPeek(tokenRParen) {
7+
return nil
8+
}
9+
return expr
10+
}
11+
12+
func (p *parser) parsePrefixExpression() Expression {
13+
pos := p.curToken.Pos
14+
operator := p.curToken.Type
15+
p.nextToken()
16+
right := p.parseExpression(precPrefix)
17+
return &UnaryExpr{Operator: operator, Right: right, position: pos}
18+
}
19+
20+
func (p *parser) parseInfixExpression(left Expression) Expression {
21+
pos := p.curToken.Pos
22+
operator := p.curToken.Type
23+
precedence := p.curPrecedence()
24+
p.nextToken()
25+
right := p.parseExpression(precedence)
26+
return &BinaryExpr{Left: left, Operator: operator, Right: right, position: pos}
27+
}
28+
29+
func (p *parser) parseRangeExpression(left Expression) Expression {
30+
pos := p.curToken.Pos
31+
precedence := p.curPrecedence()
32+
p.nextToken()
33+
right := p.parseExpression(precedence)
34+
return &RangeExpr{Start: left, End: right, position: pos}
35+
}

0 commit comments

Comments
 (0)