1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- module Chervil
- RSpec.describe Lexer do
- it 'lexes parens' do
- expect(Lexer.new('()').tokenize).to eq(
- [
- Token.new(:lparen, '('),
- Token.new(:rparen, ')'),
- Token.new(:eof, 'eof')
- ]
- )
- end
-
- it 'lexes integers' do
- expect(Lexer.new('1').get_next_token).to eq(Token.new(:number, '1'))
- end
-
- it 'lexes floats' do
- expect(Lexer.new('2.3').get_next_token).to eq(Token.new(:number, '2.3'))
- end
-
- it 'ignores whitespace' do
- expect(Lexer.new('1 2 3').tokenize).to eq(
- [
- Token.new(:number, '1'),
- Token.new(:number, '2'),
- Token.new(:number, '3'),
- Token.new(:eof, 'eof')
- ]
- )
- end
-
- it 'lexes identifiers' do
- expect(Lexer.new('hello').get_next_token).to eq(
- Token.new(:identifier, 'hello')
- )
- end
-
- it 'lexes strings' do
- expect(Lexer.new('"hello"').get_next_token).to eq(
- Token.new(:string, 'hello')
- )
- expect(Lexer.new("'world'").get_next_token).to eq(
- Token.new(:string, 'world')
- )
- end
- end
- end
|