Skip to content

Commit

Permalink
Make abbadingo parser more tolerant of trailing whitespace
Browse files Browse the repository at this point in the history
  • Loading branch information
TCatshoek committed Mar 19, 2024
1 parent 94f415b commit 57ab99d
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 2 deletions.
4 changes: 3 additions & 1 deletion source/input/parsers/grammar/abbadingoheader.h
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,9 @@ namespace {

// The complete abbadingo header: number:dsft/name1,... number:dsft/name2,...
struct abbadingo_header_p {
static constexpr auto rule = dsl::twice(dsl::p<abbadingo_header_part_p>, dsl::trailing_sep(dsl::ascii::space)) + (dsl::newline | dsl::eof);
static constexpr auto rule = dsl::twice(dsl::p<abbadingo_header_part_p>, dsl::trailing_sep(dsl::ascii::space))
+ dsl::whitespace(dsl::ascii::blank)
+ (dsl::newline | dsl::eof);
static constexpr auto value = lexy::construct<abbadingo_header_info>;
};
}
Expand Down
3 changes: 2 additions & 1 deletion source/input/parsers/grammar/abbadingosymbol.h
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ namespace {
};

struct symbol_list {
static constexpr auto rule = dsl::list(dsl::p<symbol>, dsl::sep(dsl::ascii::space));
static constexpr auto rule = dsl::list(dsl::peek(dsl::p<symbol>) >> dsl::p<symbol>, dsl::trailing_sep(dsl::ascii::blank));
static constexpr auto value = lexy::as_list<std::vector<abbadingo_symbol_info>>;
};

Expand All @@ -193,6 +193,7 @@ namespace {
};

struct abbadingo_trace {

static constexpr auto rule = [] {
auto trace_info_part = dsl::p<trace_label> + ws + dsl::p<trace_specifier>;
auto symbol_list_part = ws + dsl::p<symbol_list>;
Expand Down
20 changes: 20 additions & 0 deletions tests/testabbadingoparser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,13 @@ TEST_CASE("abbadingo header parser: whole thing", "[parsing]") {
std::cout << "value: " << value << "\n";
}

TEST_CASE("abbadingo header parser: trailing whitespace", "[parsing]") {
auto input = lexy::zstring_input("50:ds/name1,ft/name2 8:d/n1,f/n2 ");
auto result = lexy::parse<grammar::abbadingo_header_p>(input, lexy_ext::report_error);
REQUIRE(result);
auto value = result.value();
}

TEST_CASE("abbadingo symbol parser", "[parsing]") {
auto input = lexy::zstring_input("10.1");
auto result = lexy::parse<symbol_grammar::attr_val_double>(input, lexy_ext::report_error);
Expand Down Expand Up @@ -378,4 +385,17 @@ TEST_CASE("abbadingo_parser: add single trace", "[parsing]") {

REQUIRE(traces.size() == 1);
REQUIRE(traces.at(0)->to_string() == "0 3 a b c");
}

TEST_CASE("abbadingo trace parser - trailing whitespace", "[parsing]") {
auto input = lexy::zstring_input("label 3 a b c ");
auto result = lexy::parse<symbol_grammar::abbadingo_trace>(input, lexy_ext::report_error);
REQUIRE(result.has_value());
auto value = result.value();
REQUIRE(value.label == "label");
REQUIRE(value.trace_info.number == 3);
REQUIRE(value.symbols.size() == 3);
REQUIRE(value.symbols.at(0).name == "a");
REQUIRE(value.symbols.at(1).name == "b");
REQUIRE(value.symbols.at(2).name == "c");
}

0 comments on commit 57ab99d

Please sign in to comment.