100 lines
No EOL
4.6 KiB
Scheme
100 lines
No EOL
4.6 KiB
Scheme
(article
|
||
(hgroup
|
||
(h1 "feature change applier")
|
||
(p (em "a first attempt at a conlanging tool")))
|
||
(section
|
||
(hgroup
|
||
(h2 "what is this?")
|
||
(p
|
||
(em
|
||
"a tool for conlanging: a feature-based sound-change applier
|
||
capable of applying multiple sets of rules at once."))
|
||
(hr))
|
||
(p
|
||
"you can try it out here: "
|
||
(a ((href "https://sorrelbri.github.io/feature-change-applier/"))
|
||
"feature change applier app"))
|
||
(img ((src "/static/img/fca.png")
|
||
(alt "an image of Feature Change Applier application. visible
|
||
are labeled sections. 'proto language lexicon' is a text
|
||
field with nonsense weirds. 'phonetic features' is a list
|
||
of binary values shuch as '+ back' / '- back' and
|
||
characters representing associated sounds like 'a / u / ɯ'
|
||
/ 'ə', 'epoch 1' is a text field with a list of phonetic
|
||
rules such as
|
||
'[+ occlusive - nasal]>[+ occlusive + nasal]/n_.' and
|
||
buttons to 'Remove epoch 1' or 'Add Epoch'. 'modeling
|
||
options' is a single selected radio button labeled
|
||
'Default output' with buttons labeled 'Run Changes' and
|
||
'Clear Output'. 'Results of Run' is a list headed 'epoch
|
||
1' and containing newline separated words 'annɯ anat ant
|
||
annɯ tʰa nnɯ")))
|
||
(h3 "an unfinished project")
|
||
(p
|
||
"some background on conlanging and my interst in conlanging software
|
||
can be found in this "
|
||
(a ((href "/unsettled/1"))
|
||
"introductory post about conlanging software"))
|
||
(p
|
||
"this project was initially intended to function as a sound change
|
||
applier: a software tool that takes as input a list of lexical items
|
||
in a language and a list of sound change rules and produces as
|
||
output a new list of lexical items resulting from the application of
|
||
each rule to each of the lexical items in the input. more info about
|
||
sound change appliers will be available: "
|
||
(a ((href "/unsettled/?"))
|
||
"[pending] review of existing conlanging tools"))
|
||
(p
|
||
"there are two ways in which i sought to extend the functionality of
|
||
the typical sound change applier: through feature-based rules, and
|
||
through the processing of multiple rule sets at one time. "
|
||
(a ((href "https://en.wikipedia.org/wiki/Distinctive_feature"))
|
||
"phonological features")
|
||
" are proposed binary attributes of phonology that can be used to
|
||
distinguish different phonemes. [+/- nasal] is the distinguishing
|
||
feature in the minimal pair of phones [n][d]. the processing of
|
||
multiple rule sets is accomplished in this project via the notion
|
||
of an 'epoch.' at least one epoch must be defined, which takes as
|
||
its input the initial lexicon. any additional epochs must have
|
||
their input lexicons configured by the user, but they will default
|
||
to running in sequence. what this allows is for 'snapshots' of
|
||
lexicons between suites of rules (analogous to 'intermediate'
|
||
phases in historical linguistics, such as old english>middle
|
||
english>early modern english>modern english.) this also allows for
|
||
comparisons of different rule sets or the simulation of sound
|
||
changes across a family of related languages (analogous to vulgar
|
||
latin>italo-western, vulgar-latin>eastern romance, vulgar
|
||
latin>southern romance)")
|
||
(p
|
||
"both of these additional features are present, although the app is
|
||
quite buggy and unreliable"))
|
||
(section
|
||
(hgroup
|
||
(h2 "how does it work?")
|
||
(p (em "i'll tell you what i remember"))
|
||
(hr))
|
||
(p
|
||
"i made this a few years ago, right after i first learning how to
|
||
write web apps and so i used the tools that i knew a few years ago.
|
||
this means that it's javascript! specifically, a react app, where
|
||
all the fun processing stuff happens via the react hooks useReducer
|
||
pattern. "
|
||
(a
|
||
((href
|
||
"https://github.com/sorrelbri/feature-change-applier/tree/sj_latl/src/reducers"
|
||
)) "all of the reducers are here"))
|
||
(p
|
||
"at the end of my meaningful work on the project, i started using a "
|
||
(a ((href "https://nearley.js.org/"))
|
||
"javascript earley parser called nearley")
|
||
" as i started conceptualizing the tool as just one component in a
|
||
larger suite of tools i hoped to create. the language part never got
|
||
very far--writing a language is hard! writing a language when you've
|
||
not had significant programming experience is hard! ill advised? "
|
||
(a
|
||
((href
|
||
"https://github.com/sorrelbri/feature-change-applier/blob/sj_latl/src/utils/latl/grammar.ne"))
|
||
"there's the start of something like an ebnf grammar for the
|
||
project"))
|
||
(p
|
||
"this project isn't done! and it never will be!"))) |