ddfreyne/d-parse

View on GitHub
samples/parse-errortest

Summary

Maintainability
Test Coverage
#!/usr/bin/env ruby
# frozen_string_literal: true

require 'd-parse'
require 'pp'

module MyGrammar
  extend DParse::DSL

  LETTER =
    describe(alt(*('a'..'z').map { |c| char(c) }), 'letter')

  IDENTIFIER =
    describe(
      repeat(LETTER).capture,
      'identifier',
    )

  FUNDEF =
    seq(
      describe(IDENTIFIER, 'identifier'),
      eof,
    )

  PARSER =
    alt(
      string('Hello!'),
      string('Hello, world!'),
      string('Hello… ?'),
    )

  TESTB =
    seq(
      alt(
        seq(string('a+a').capture),
        seq(string('a').capture),
      ),
      eof,
    )
end

puts MyGrammar::PARSER.apply('Hello, what?').pretty_message
puts
puts MyGrammar::FUNDEF.apply('foo3a').pretty_message
puts
puts MyGrammar::TESTB.apply('a+').pretty_message