parser_expression.go 588 B

1234567891011121314151617181920212223242526272829303132
  1. package parser
  2. import (
  3. "code.osinet.fr/fgm/waiig15/ast"
  4. "code.osinet.fr/fgm/waiig15/token"
  5. )
  6. func (p *Parser) parseExpression(precedence int) ast.Expression {
  7. prefix := p.prefixParseFns[p.curToken.Type]
  8. if prefix == nil {
  9. return nil
  10. }
  11. leftExp := prefix()
  12. return leftExp
  13. }
  14. func (p *Parser) parseExpressionStatement() *ast.ExpressionStatement {
  15. stmt := &ast.ExpressionStatement{
  16. Token: p.curToken,
  17. }
  18. stmt.Expression = p.parseExpression(LOWEST)
  19. // Semicolons are optional to help use REPL input.
  20. if p.peekTokenIs(token.SEMICOLON) {
  21. p.nextToken()
  22. }
  23. return stmt
  24. }