Chervil is a toy Lisp interpreter written in Ruby
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

lexer_spec.rb 1.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. module Chervil
  2. RSpec.describe Lexer do
  3. it 'lexes parens' do
  4. expect(Lexer.new('()').tokenize).to eq(
  5. [
  6. Token.new(:lparen, '('),
  7. Token.new(:rparen, ')'),
  8. Token.new(:eof, 'eof')
  9. ]
  10. )
  11. end
  12. it 'lexes integers' do
  13. expect(Lexer.new('1').get_next_token).to eq(Token.new(:number, '1'))
  14. end
  15. it 'lexes floats' do
  16. expect(Lexer.new('2.3').get_next_token).to eq(Token.new(:number, '2.3'))
  17. end
  18. it 'ignores whitespace' do
  19. expect(Lexer.new('1 2 3').tokenize).to eq(
  20. [
  21. Token.new(:number, '1'),
  22. Token.new(:number, '2'),
  23. Token.new(:number, '3'),
  24. Token.new(:eof, 'eof')
  25. ]
  26. )
  27. end
  28. it 'lexes identifiers' do
  29. expect(Lexer.new('hello').get_next_token).to eq(
  30. Token.new(:identifier, 'hello')
  31. )
  32. end
  33. it 'lexes strings' do
  34. expect(Lexer.new('"hello"').get_next_token).to eq(
  35. Token.new(:string, 'hello')
  36. )
  37. expect(Lexer.new("'world'").get_next_token).to eq(
  38. Token.new(:string, 'world')
  39. )
  40. end
  41. end
  42. end