Я хотел бы знать, подойдет ли такой инструмент, как ANTLR, для анализа этих правил, или это излишне, и я должен сделать свой собственный анализатор.
Это для анализа чьего-либо формата, поэтому я не могу его изменить. Это для развлечения и практики, так что не беспокойтесь слишком сильно. Это правила для описания фонетических изменений в языках. Я процитирую оригинального автора :
Изменение формата звука
Надеюсь, формат правил будет знаком любому лингвисту. Например, вот одно изменение звука:
c/g/V_V
Это правило гласит, что нужно заменить c на g между гласными. (Мы увидим, как обобщить это правило ниже.)
В общем, изменение звука выглядит так:
x/y/z
где x - это то, что нужно изменить, y - то, к чему оно изменяется, а z - окружение.
Часть z всегда должна содержать подчеркивание _, представляющее часть, которая изменяется. Это может быть все, что есть, как в
gn/nh/_
, который говорит программе безоговорочно заменить gn на nh.
Символ # представляет начало или конец слова. Так
u/o/_#
означает заменить вас на o, но только в конце слова.
Средняя (y) часть может быть пустой, как в
s//_#
Это означает, что s удаляется, когда заканчивается слово.
Переменные
Среда (часть z) может содержать переменные, как V выше. Они определены в верхней части файла. Я использую заглавные буквы для этого, хотя это не является обязательным требованием. Переменные могут быть длиной не более одного символа. Вы можете определить любые переменные, необходимые для изменения звука. Например. Вы можете определить S как любую остановку, или K для любого коронала, или как угодно.
Итак, определение переменной и правило
F=ie
c/i/F_t
означает, что c меняется на i после передней гласной и перед т.
Вы также можете использовать переменные в первых двух частях. Например, предположим, что вы определили
S=ptc
Z=bdg
S/Z/V_V
Это означает, что остановки ptc изменяются на их озвученные эквиваленты bdg между гласными. В этом случае переменные должны соответствовать единице за один - p переходит к b, t переходит к d и т. Д. Каждый символ в переменной замещения (здесь Z) дает преобразованное значение каждого символа во входной переменной (здесь S) , Убедитесь, что два определения переменных имеют одинаковую длину!
Переменную также можно установить на фиксированное значение или удалить. Э.Г.
Z//V_V
говорит об удалении голосовых остановок между гласными.
Правило порядка
Правила применяются в порядке их перечисления. Итак, со словом опера и правилами
p/b/V_V
e//C_rV
первое правило озвучивает р, в результате чего обера; вторая удаляет е между согласной и межочаговой т, что приводит к обра.
Параметр командной строки -p может помочь в отладке правил, поскольку он заставляет вывод точно указывать, какие правила применяются к каждому слову.
Дополнительные элементы в среде
Один или несколько элементов в среде могут быть помечены как необязательные в скобках. Э.Г.
u/ü/_C(C)F
говорит, чтобы изменить вас на ü, когда за ним следует одна или две согласные, а затем передний гласный.