From 25213306cb6f5ac0d5d83ded5c3182b7c07f5f6c Mon Sep 17 00:00:00 2001 From: Rob Durst Date: Thu, 4 Jan 2024 10:51:02 -0400 Subject: [PATCH] add rspec for parser --- spec/zodiac/parser_spec.rb | 19 +++++++++++++++++++ src/zodiac/parser.rb | 10 ++++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 spec/zodiac/parser_spec.rb diff --git a/spec/zodiac/parser_spec.rb b/spec/zodiac/parser_spec.rb new file mode 100644 index 0000000..dbe799d --- /dev/null +++ b/spec/zodiac/parser_spec.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +require './spec/spec_helper' +require './src/zodiac/parser' + +describe Zodiac::Parser do + describe '.parse' do + context 'when empty program' do + it 'returns empty program' do + parser = described_class.new('') + + actual = parser.parse + expected = { kind: 'PROGRAM', value: [] } + + expect(actual).to eq(expected) + end + end + end +end diff --git a/src/zodiac/parser.rb b/src/zodiac/parser.rb index 78818fd..f695584 100644 --- a/src/zodiac/parser.rb +++ b/src/zodiac/parser.rb @@ -197,13 +197,19 @@ def initialize(raw_string) @tokens = [] end - def parse; end + def parse + parse_program + end private # PROGRAM : COMPSTMT def parse_program - { kind: 'PROGRAM', value: parse_compstmt } + cmp_stmts = [] + + cmp_stmts << parse_compstmt while @cur_index < @raw_string.length + + { kind: 'PROGRAM', value: cmp_stmts } end # COMPSTMT : STMT (TERM EXPR)* [TERM]