FOSCA- the Family-Oriented Sound Change Applier
FOSCA (/ˈfoʊʃə/) is a Perl program I wrote that runs an SCA through many languages: to explain, an example.
Let's say you've made a highly developed language family, with seven languages descending from the proto-language and a few having daughters of their own. What happens when you want to add a new word? Without FOSCA, you would add it to the mother lexicon, and run the SCAs for each of the daughters. If you want to change the rules, same thing. With FOSCA, you have one rule file that contains rules for all the daughter languages. Specifying the SCA you want with a template, it runs the SCA for each mother-daughter pair.
Suggestions? Comments? Criticisms? I'd love 'em.
Let's say you've made a highly developed language family, with seven languages descending from the proto-language and a few having daughters of their own. What happens when you want to add a new word? Without FOSCA, you would add it to the mother lexicon, and run the SCAs for each of the daughters. If you want to change the rules, same thing. With FOSCA, you have one rule file that contains rules for all the daughter languages. Specifying the SCA you want with a template, it runs the SCA for each mother-daughter pair.
Suggestions? Comments? Criticisms? I'd love 'em.
Download
fosca.zip |
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.
Command line usage
Usage: perl fosca.pl [-d] foscafile
- The optional -d doesn't delete the temporary rule files. Use it if you want to (say) share the rules for one mother-to-daughter change, but know that the files will be deleted next time FOSCA is run without -d. Useless? I just used it for debugging.
- foscafile is a path to the FOSCA file that contains all the templates and rules.
FOSCA File
The first line contains a template, the system command that runs the FOSCA file. For example, it could be java -jar ASCA.jar -f IN -r RULES -o OUT. Before the command is executed, those are replaced with the name of the mother file, the temporary rules file, and the daughter file. WARNING: everything referenced should be in the same folder, or absolute paths should be given.
After that, come declarations of new languages: daughterlex.txt of motherlex.txt {
rules
}
The most important thing to remember is to make sure that the braces '{', '}' don't share lines with rules, or those rules won't be applied.
What about the rules? See the documentation for whichever SCA you use.
After that, come declarations of new languages: daughterlex.txt of motherlex.txt {
rules
}
The most important thing to remember is to make sure that the braces '{', '}' don't share lines with rules, or those rules won't be applied.
What about the rules? See the documentation for whichever SCA you use.