spbu-se / KotlinAutomataConstructor

Automaton editing, visualization, simulation and analyzing desktop software
Apache License 2.0
9 stars 1 forks source link

Support production of kind `<nonterminal> -> <any symbol> <any symbol>` #25

Open IlyaMuravjov opened 1 week ago

IlyaMuravjov commented 1 week ago

Проблема

Сейчас из продукций с двумя символами в правой части поддерживаются только продукции вида <нетерминал> -> <нетерминал> <нетерминал>, из-за чего для каждого терминала приходится создавать вспомогательный соответствующий нетерминал и продукцию <нетерминал> -> <терминал>, что затрудняет восприятие КС-грамматик человеком

Решение

Поддержать продукции вида <нетерминал> -> <произвольный символ> <произвольный символ>

IgorFilimonov commented 1 week ago

В данный момент времени для алгоритма Хеллингса можно ввести любую контекстно-свободную грамматику, которая для работы алгоритма будет автоматически переведена в НФХ, в которой и будет показываться пользователю (как будто так немного нагляднее?)

IlyaMuravjov commented 1 week ago

С большой НФХ не удобно работать человеку, сложно воспринимать много вспомогательных продукций.

Например, у меня была вот такая грамматика:

S -> a b

Мне её зачем-то удлиняют до:

S -> N1 N2
N1 -> a
N2 -> b

И заставляют думать про какие-то N1 и N2, хотя можно было бы научить алгоритм Хеллингса работать с исходной продукцией S -> a b, т.е. продукцией вида <нетерминал> -> <произвольный символ> <произвольный символ>.

Другими словами, я предлагаю не просто следовать определению 7, а учесть замечание 2.

image

image