Если бы между парами ключ-значение были включены символы новой строки, это было бы легко достижимо.Я не знаю «иронии», но мое первоначальное ощущение, что почти ни один генератор парсера / лексера не будет иметь дело с этим, учитывая только наивное грамматическое описание.Это требует, по сути, неограниченного взгляда.
Концептуально (поскольку я ничего не знаю об этом продукте), вот как я бы это сделал:
Токениз, основанный на пробелах и двоеточиях (то есть на каждой случайной последовательности символов, которыене пробел или двоеточие не является каким-либо токеном «идентификатора».
Затем необходимо сделать так, чтобы каждое «предложение» описывалось от двоеточия:
sentence = identifier_list
| : identifier_list identifier : sentence
Этого недостаточно, чтобы заставить это работать, но я надеюсь, что вы поняли идею, по крайней мере.Вы должны быть очень осторожны, чтобы отличить identifier_list от одного идентификатора, чтобы они могли быть проанализированы однозначно.Точно так же, если ваш инструмент позволяет вам определять приоритет и ассоциативность, вам, возможно, не удастся выполнить привязку ":" очень сильно влево, так что ваша грамматика будет просто:
sentence = identifier : identifier_list
Иповедение должно быть (identifier :) identifier_list
.