selectors support for hash
This commit is contained in:
@@ -35,6 +35,7 @@ var precedences = map[token.TokenType]int{
|
||||
token.ASTERISK: PRODUCT,
|
||||
token.LPAREN: CALL,
|
||||
token.LBRACKET: INDEX,
|
||||
token.DOT: INDEX,
|
||||
}
|
||||
|
||||
type (
|
||||
@@ -89,6 +90,7 @@ func New(l *lexer.Lexer) *Parser {
|
||||
p.registerInfix(token.LPAREN, p.parseCallExpression)
|
||||
p.registerInfix(token.LBRACKET, p.parseIndexExpression)
|
||||
p.registerInfix(token.ASSIGN, p.parseAssignmentExpression)
|
||||
p.registerInfix(token.DOT, p.parseSelectorExpression)
|
||||
|
||||
// Read two tokens, so curToken and peekToken are both set
|
||||
p.nextToken()
|
||||
@@ -570,3 +572,9 @@ func (p *Parser) parseComment() ast.Statement {
|
||||
func (p *Parser) parseNull() ast.Expression {
|
||||
return &ast.Null{Token: p.curToken}
|
||||
}
|
||||
|
||||
func (p *Parser) parseSelectorExpression(expression ast.Expression) ast.Expression {
|
||||
p.expectPeek(token.IDENT)
|
||||
index := &ast.StringLiteral{Token: p.curToken, Value: p.curToken.Literal}
|
||||
return &ast.IndexExpression{Left: expression, Index: index}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user