parser_return.go 722 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) parseReturnStatement() *ast.ReturnStatement {
  7. defer untrace(trace("parseReturnStatement"))
  8. stmt := &ast.ReturnStatement{
  9. Token: p.curToken,
  10. }
  11. // There should be an expression to consume here.
  12. p.nextToken()
  13. // Skip the expression for now, progress to the semicolon terminating the
  14. // statement.
  15. for !p.curTokenIs(token.SEMICOLON) {
  16. p.nextToken()
  17. }
  18. return stmt
  19. }
  20. func (p *Parser) registerInfix(tokenType token.TokenType, fn infixParseFn) {
  21. p.infixParseFns[tokenType] = fn
  22. }
  23. func (p *Parser) registerPrefix(tokenType token.TokenType, fn prefixParseFn) {
  24. p.prefixParseFns[tokenType] = fn
  25. }