1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
module Lox

  class Error < StandardError
    attr_reader :token, :message

    def initialize(token, message)
      @token, @message = token, message
    end
  end

  class ParseError < Error
    def initialize(token, message)
      where = token.type == :EOF ? "end" : "'#{token.lexeme}'"

      error = "Error"
      error << " at #{where}" unless where.empty?

      super(token, "[line #{token.line}] #{error}: #{message}")
    end
  end

  RuntimeError = Class.new(Error)
  ResolverError = Class.new(Error)

end