- Kip ist eine experimentelle Programmiersprache, die grammatische Fälle und Modi des Türkischen in das Typsystem integriert und die Verbindung von natürlicher Sprachmorphologie und Typentheorie erforscht
- Sie spiegelt Substantivdeklination und Vokalharmonie des Türkischen in der Codestruktur wider, unterscheidet Funktionsargumente über Kasus-Suffixe und unterstützt eine flexible Argumentreihenfolge
- Zentrale Funktionen moderner funktionaler Sprachen wie Pattern Matching, polymorphe Typen, induktive Datentypen und Ein-/Ausgabe-Effekte werden in türkischen grammatischen Formen ausgedrückt
- Der Build erfolgt mit dem Morphologie-Analyzer Foma und Haskell Stack; außerdem bietet die Sprache eine WASM-basierte Browser-Laufzeitumgebung sowie Bytecode-Caching (.iz)
- Als Projekt für Forschung und Lehre zeigt sie den Schnittpunkt von Linguistik und Programmiersprachen-Design und erprobt die Möglichkeiten natürlichsprachbasierter Sprachentwürfe
Überblick über Kip
- Kip ist nach dem türkischen Wort „kip“ (Modus) benannt und eine experimentelle Sprache, die türkische grammatische Fälle in das Typsystem aufnimmt
- Die Substantivfälle (ismin halleri) und die Vokalharmonie (vowel harmony) des Türkischen werden in das Design der Programmiersprache integriert
- Es handelt sich um ein Projekt für Forschung und Lehre, nicht um eine Sprache für den produktiven Einsatz
- Es werden Tutorials auf Türkisch und Englisch angeboten, mit denen man das Schreiben von Kip-Programmen lernen kann
- Grammatik und Verhalten befinden sich in einem experimentellen Stadium und können sich künftig ändern
Sprachmerkmale
- Türkische grammatische Fälle als Typen
- Unterstützt werden acht Fälle: Nominativ, Akkusativ, Dativ, Lokativ, Ablativ, Genitiv, Instrumental und Possessiv
- Jeder Fall wird durch ein Suffix markiert und unterscheidet Beziehungen zwischen Funktionsargumenten explizit
- Flexible Argumentreihenfolge
- Da Kasus-Suffixe die Argumentbeziehungen eindeutig machen, bleibt die Bedeutung auch bei vertauschter Reihenfolge gleich
- Beispiel:
(5'le 3'ün farkını) yaz. und (3'ün 5'le farkını) yaz. liefern dasselbe Ergebnis
- Definition induktiver Datentypen
- Unterstützung polymorpher Typen
- Generische Datenstrukturen lassen sich definieren
- Beispiel: Definition eines Listentyps in der Form
(öğe listesi)
- Pattern Matching
- Pattern Matching wird mit dem Konditionalsuffix
-sa/-se ausgeführt
- Unterstützt verschachtelte Muster, Binder und Wildcards (
değilse)
- Konstantendefinitionen
- Benannte Konstanten werden mit dem Schlüsselwort
diyelim deklariert
- Beispiel:
sıfırın ardılına bir diyelim.
- Ein-/Ausgabe und Effektverarbeitung
- Grundtypen
- Ganzzahlen (
tam-sayı): unterstützen Operationen wie toplamı, farkı, çarpımı usw.
- Strings (
dizge): bieten uzunluğu, birleşimi, tam-sayı-hali
- Ein-/Ausgabe: unterstützt die Befehle
yazmak und okumak
- Kommentare und Literale
- Kommentare:
(* ... *)
- Literale: in Formen wie
"merhaba"'yı yaz. mit Kasus-Suffixen
Installation und Ausführung
- Erforderliche Werkzeuge
- Foma: Toolkit für finite-state-Morphologieanalyse
- Stack: Build-Tool für Haskell
- Build-Methode
- Ausführung des Skripts
install.sh oder manueller Build mit dem Befehl stack build
- Enthält den TRmorph-Transducer in
vendor/trmorph.fst
- Ausführung
- REPL:
stack exec kip
- Dateiausführung:
stack exec kip -- --exec path/to/file.kip
- Installation in PATH:
stack install
WASM Playground
- Das Verzeichnis
playground/ enthält einen Build für die Browser-Ausführung
kip-playground wird nach wasm32-wasi kompiliert
- Mit HTML/JS-Harness kann Kip im Browser ausgeführt werden
- Details zum Build stehen in
playground/README.md
Bytecode-Cache (.iz)
- Für jede
.kip-Datei werden die Ergebnisse der Typprüfung gecacht und als .iz-Datei gespeichert
- Wenn sich Quelltext oder Abhängigkeiten nicht ändern, wird der Cache wiederverwendet
- Beim Löschen der
.iz-Datei werden Parsing und Typprüfung erneut ausgeführt
- Durch Einbeziehung eines Compiler-Hashs erfolgt bei Versionsänderungen automatisch eine Invalidierung
Beispielprogramm
- Enthält ein Beispiel zur Definition natürlicher Zahlen, zur Deklaration von Konstanten, zu einer Additionsfunktion und zur Ausgabe des Ergebnisses
Bir doğal-sayı
ya sıfır
ya da bir doğal-sayının ardılı
olabilir.
sıfırın ardılına bir diyelim.
birin ardılına iki diyelim.
ikinin ardılına üç diyelim.
(bu doğal-sayıyla) (şu doğal-sayının) toplamı,
bu sıfırsa,
şu,
öncülün ardılıysa,
(öncülle) (şunun ardılının) toplamıdır.
(ikiyle üçün toplamını) yaz.
Projektstruktur
- app/ : CLI-Einstiegspunkt (
Main.hs)
- src/Kip/ : enthält AST, Cache, Interpreter, Parser, Renderer und Typprüfer
- lib/ : Basismodule (
giriş.kip, temel.kip, temel-liste.kip usw.)
- tests/ : Testfälle für Erfolg (
succeed/) und Fehlschlag (fail/)
- vendor/ : Morphologie-Transducer
trmorph.fst
Tests
- Ausführung mit dem Befehl
stack test
tests/succeed/: Tests, die erfolgreich sein müssen
tests/fail/: Tests, die fehlschlagen müssen
Morphologische Analyse
- Kip verwendet TRmorph zur morphologischen Analyse des Türkischen
- Mehrdeutige Wörter (z. B. „takası“) werden beim Parsen mit allen möglichen Interpretationen beibehalten
- Die Bedeutung wird erst in der Typprüfung bestimmt
- Um eine bestimmte Interpretation zu erzwingen, kann ein Apostroph (
') verwendet werden (taka'sı, takas'ı)
Lizenz
Noch keine Kommentare.