Модификация генератора, использующая оригинальный механизм настройки через внешний файл с набором правил склонения.
Автор: Алексей Салихов
Генератор склонений (CaseGen) v 0.51b
Описание алгоритма генерации и синтаксиса скрипт-языка
Алгоритм работает по принципу _согласования_ _правил_ в Пролог-системе, так что если вы знакомы с программированием на Прологе, то быстро во всём разберетесь O:)
Синтаксис алгоритма склонения для падежа <падеж>:
#<падеж>
<правило>; [<правило>; ... ]
#конец
вместо #конец можно начать новый #падеж
падежи:
именительный | родительный | дательный | винительный | творительный | предложный
Для каждого падежа программа последовательно просматривает _правила_, пытаясь найти _применимые_ к данному слову. Правило _применимо_ к слову, если _маска окончания_, задаваемая правилом, согласуется с окончанием слова. Если применимое правило нашлось, окончание слова изменяется в соответствии с _маской нового окончания_, и программа переходит к следующему слову/падежу. Если правило _неприменимо_, программа переходит к рассмотрению следующего правила. Если все правила просмотрены, а соответствия не нашлось, слово не изменяется.
Синтаксис _правила_:
[<строка условных символов>] <маска окончания> <маска нового окончания>;
Каждое правило заканчивается символом ';' (точкой с запятой)
<строка условных символов> - Необязательный элемент. Один или несколько условных символов. Если условие, задаваемое символом, не выполняется, правило считается _неприменимым_, и программа переходит к рассмотрению следующего правила.
условные символы (все буквы - латинские прописные):
M - слово мужского рода (англ masculine)
F - слово женского рода (англ feminine)
N - слово среднего рода (англ neuter)
S - слово ед. числа (англ single)
P - слово мн. числа (англ plural)
I - слово не одушевлено (англ inanimated)
A - слово одушевлено (англ animated)
L - слово - последнее в строке (по этому принципу программа различает прилагательные и существительные)
U - безударное окончание (пока что выставляется для всей фразы, что не очень удобно, но это пока...)
<маска окончания> - маска, которую программа сравнивает с окончанием слова, пытаясь применить правило. Состоит из букв, цифр, и символа '_'.
Буквы - согласуются с соответствующими буквами.
Символ '_' - согласуется с любой буквой.
Цифры - согласуются с любой буквой, входящей в соответствующую строку букв. Соответствие строк и цифр задается директивой
#строка <цифра> <строка букв>
В файле имеет смысл только одна директива для каждой цифры, т. к. программа все равно использует только последнюю встретившуюся.
Если маска окончания длиннее слова, правило неприменимо.
<маска нового окончания> - маска, согласно которой программа изменяет окончание слова, если правило применимо. Состоит из букв и символа '_'. Изменение начинается с той же буквы слова, с которой сравнивался первый символ _маски окончания_.
Буквы - буква слова заменяется на соответствующую букву.
Символ '_' - "прозрачка", оставляет соответствующую букву без изменения. (если встретится после конца слова, результат непредсказуем!)
В текст алгоритма можно вставлять комментарии:
1) В отдельной строке, начинающеися с '#' и пробела.
2) В любой строке, после символов '//' или '##':
################################## - это комментарий
# это комментарий
це ца; 6е _я; //это комментарий в остатке строки
#это неизвестная директива 'это' - приведет к ошибке