100 lines
4.7 KiB
Scheme
100 lines
4.7 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/settled/1/fca.jpg")
|
|||
|
(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!")))
|