diff options
-rw-r--r-- | data/db.struct | 263 | ||||
-rw-r--r-- | data/dbverb.struct | 323 | ||||
-rw-r--r-- | scm/conjugator.scm | 289 | ||||
-rw-r--r-- | src/ellinika/elmorph.c | 51 | ||||
-rw-r--r-- | xml/pl/rhmata.xml | 254 | ||||
-rw-r--r-- | xml/ru/rhmata.xml | 254 |
6 files changed, 867 insertions, 567 deletions
diff --git a/data/db.struct b/data/db.struct index 616d2c5..1b2f160 100644 --- a/data/db.struct +++ b/data/db.struct @@ -162,262 +162,3 @@ CREATE TABLE newsart( -set names utf8; -DROP TABLE IF EXISTS verbflect; -CREATE TABLE verbflect( - ident int(32) not null, -- REL 8 - sing1 varchar(32), - sing2 varchar(32), - sing3 varchar(32), - plur1 varchar(32), - plur2 varchar(32), - plur3 varchar(32), - UNIQUE(ident) -); - -DROP TABLE IF EXISTS conjugation; -CREATE TABLE conjugation( - conj char(2), -- REL 9 - voice enum('act','pas'), -- Ενεργητηκή/Μεσοπαθητική - mode enum('ind','sub','imp'), - tense varchar(128), - thema enum('pres','aor','sub','synt'), -- Ενεστώτα, Αόριστου, υποτακτικής, syntethic - suffix char(32), - flect int(32), -- REL 8 - accmap char(7), -- accent map - particle char(2), -- NULL/θα/να - aux varchar(128), -- REL 10 - auxtense char(32), - KEY (conj), - KEY (voice), - KEY (mode) -); - -DROP TABLE IF EXISTS participle; -CREATE TABLE participle ( - conj char(2), -- REL 9 - voice enum('act','pas'), -- Ενεργητηκή/Μεσοπαθητική - tense char(32), - thema enum('pres','aor','sub'), -- Ενεστώτα, Αόριστου, υποτακτικής - suffix char(32), - flect char(32), - aux varchar(128) -); - -INSERT INTO verbflect VALUES -(0, NULL, NULL, NULL, NULL, NULL, NULL), --- Συζυγία Α' -(1, "ω", "εις", "ει", "ουμε", "ετε", "ουν(ε)"), -(2, "α", "ες", "ε", "αμε", "ατε", "αν"), -(8, NULL, "ε", NULL, NULL, "ετε", NULL), -(9, NULL, "ε", NULL, NULL, "τε", NULL), -(11, "ομαι", "εσαι", "εται", "όμαστε", "εστε", "ονται"), -(12, "όμουν", "όσουν", "όταν", "όμαστε", "όμαστε", "ονταν"), -(15, "ώ", "είς", "εί", "ούμε", "είτε", "ούν(ε)"), -(17, NULL, "ου", NULL, NULL, NULL, NULL), -(18, NULL, NULL, NULL, NULL, "είτε", NULL), --- Συζυγία Β΄ - α΄ τάξη -(20, "ώ,άω", "άς", "ά,άει","άμε,ούμε","άτε","ούν(ε)"), -(25, NULL, "α", NULL, NULL, "άτε", NULL), -(28, "ιέμαι", "ιέσαι", "ιέται", "ιόμαστε", "ιέστε", "ιούνται"), -(29, "ιόμουν", "ιόσουν", "ιόταν", "ιόμαστε", "ιόσαστε", "ιόνταν"), -(30, NULL, "ιέσαι", NULL, NULL, "ιέσται", NULL), -(31, NULL, "ου", NULL, NULL, NULL, NULL), -(32, NULL, NULL, NULL, NULL, "είτε", NULL), --- Συζυγία Β΄ - β΄ τάξη -(33, NULL, "είς", NULL, NULL, "είτε", NULL), -(34, "ούμαι", "είσαι", "είται", "ούμαστε", "είστε", "ούνται"), -(35, "ούμουν", "ούσουν", "ούvταν", "ούμαστε", "ούσαστε", "ούνταν"), -(36, NULL, "είσαι", NULL, NULL, "είστε", NULL), -(100, "είμαι", "είσαι", "είναι", "είμαστε", "είστε,είσαστε", "είναι"), -(101, "ήμουν(α)", "ήσουν(α)", "ήταν(ε)", "ήμαστε,ήμασταν", "ήσαστε,ήσασταν", "ήταν(ε)") -; - - -INSERT INTO conjugation VALUES --- Συζυγία Α' --- Ενεργητηκή φωνή --- Οριστική -("A", "act", "ind", "Ενεστώτας", 'pres', NULL, 1, "000000", NULL, NULL, NULL), -("A", "act", "ind", "Παρατατικός", 'pres', NULL, 2, "333333+", NULL, NULL, NULL), -("A", "act", "ind", "Μέλλοντας διαρκείας", 'pres', NULL, 1, "000000", "θα", NULL, NULL), -("A", "act", "ind", "Αόριστος", 'aor', NULL, 2, "333333+", NULL, NULL, NULL), -("A", "act", "ind", "Παρακείμενος", 'synt', NULL, 0, NULL, NULL, "έχω", "Ενεστώτας"), -("A", "act", "ind", "Υπερσυντέλικος", 'synt', NULL, 0, NULL, NULL, "έχω", "Παρατατικός"), -("A", "act", "ind", "Συντελεσμένος μέλλοντας", 'synt', NULL, 0, NULL, "θα", "έχω", "Ενεστώτας"), -("A", "act", "ind", "Μέλλοντας στιγμιαίος", 'sub', NULL, 1, "000000", "θα", NULL, NULL), --- Υποτακτική -("A", "act", "sub", "Ενεστώτας", 'pres', NULL, 1, "000000", "να", NULL, NULL), -("A", "act", "sub", "Αόριστος", 'sub', NULL, 1, "000000", "να", NULL, NULL), -("A", "act", "sub", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Ενεστώτας"), --- Προστακτική -("A", "act", "imp", "Ενεστώτας", 'pres', NULL, 8, "-3--3-", NULL, NULL, NULL), -("A", "act", "imp", "Αόριστος", 'sub', NULL, 9, "-0--0-", NULL, NULL, NULL), -("A", "act", "imp", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Ενεστώτας"), --- Μεσοπαθητική φωνή --- Οριστική -("A", "pas", "ind", "Ενεστώτας", 'pres', NULL, 11, "000300", NULL, NULL, NULL), -("A", "pas", "ind", "Παρατατικός", 'pres', NULL, 12, "222333", NULL, NULL, NULL), -("A", "pas", "ind", "Μέλλοντας διαρκείας", 'pres', NULL, 11, "333333", "θα", NULL, NULL), -("A", "pas", "ind", "Αόριστος", 'aor', "ηκ", 2, "333333", NULL, NULL, NULL), -("A", "pas", "ind", "Παρακείμενος", 'synt', NULL, 0, NULL, NULL, "έχω", "Ενεστώτας"), -("A", "pas", "ind", "Υπερσυντέλικος", 'synt', NULL, 0, NULL, NULL, "έχω", "Παρατατικός"), -("A", "pas", "ind", "Συντελεσμένος μέλλοντας", 'synt', NULL, 0, NULL, "θα", "έχω", "Ενεστώτας"), -("A", "pas", "ind", "Μέλλοντας στιγμιαίος", 'aor', NULL, 15, "111111", "θα", NULL, NULL), --- Υποτακτική -("A", "pas", "sub", "Ενεστώτας", 'pres', NULL, 11, "333333", "να", NULL, NULL), -("A", "pas", "sub", "Αόριστος", 'aor', NULL, 15, "111221", "να", NULL, NULL), -("A", "pas", "sub", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Παρατατικός"), --- Προστακτική -("A", "pas", "imp", "Ενεστώτας", 'pres', NULL, 11, "-3--3-", "να", NULL, NULL), -("A", "pas", "imp", "Αόριστος", 'aor', NULL, 17, "-0----", NULL, NULL, NULL), -("A", "pas", "imp", "Αόριστος", 'aor', NULL, 18, "----2-", NULL, NULL, NULL), -("A", "pas", "imp", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Παρατατικός"), --- Συζυγία Β΄ - α΄ τάξη --- Ενεργητηκή φωνή --- Οριστική -("B1", "act", "ind", "Ενεστώτας", 'pres', NULL, 20, "ffffff", NULL, NULL, NULL), -("B1", "act", "ind", "Παρατατικός", 'pres', "ούς", 2, "ssssss", NULL, NULL, NULL), -("B1", "act", "ind", "Μέλλοντας διαρκείας", 'pres', NULL, 20, "ffffff", "θα", NULL, NULL), -("B1", "act", "ind", "Αόριστος", 'aor', "ησ", 2, "333333", NULL, NULL, NULL), -("B1", "act", "ind", "Παρακείμενος", 'synt', NULL, 0, NULL, NULL, "έχω", "Ενεστώτας"), -("B1", "act", "ind", "Υπερσυντέλικος", 'synt', NULL, 0, NULL, NULL, "έχω", "Παρατατικός"), -("B1", "act", "ind", "Συντελεσμένος μέλλοντας", 'synt', NULL, 0, NULL, "θα", "έχω", "Ενεστώτας"), -("B1", "act", "ind", "Μέλλοντας στιγμιαίος", 'aor', "ήσ", 1, "ssssss", "θα", NULL, NULL), --- Υποτακτική -("B1", "act", "sub", "Ενεστώτας", 'pres', NULL, 20, "ffffff", "να", NULL, NULL), -("B1", "act", "sub", "Αόριστος", 'aor', "ήσ", 1, "ssssss", "να", NULL, NULL), -("B1", "act", "sub", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Ενεστώτας"), --- Προστακτική -("B1", "act", "imp", "Ενεστώτας", 'pres', NULL, 25, "-0--2-", NULL, NULL, NULL), -("B1", "act", "imp", "Αόριστος", 'aor', "ησ", 9, "-3--3-", NULL, NULL, NULL), -("B1", "act", "imp", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Ενεστώτας"), --- Μεσοπαθητική φωνή --- Οριστική -("B1", "pas", "ind", "Ενεστώτας", 'pres', NULL, 28, "ffffff", NULL, NULL, NULL), -("B1", "pas", "ind", "Παρατατικός", 'pres', NULL, 29, "ffffff", NULL, NULL, NULL), -("B1", "pas", "ind", "Μέλλοντας διαρκείας", 'pres', NULL, 28, "ffffff", "θα", NULL, NULL), -("B1", "pas", "ind", "Αόριστος", 'aor', "ηκ", 2, "333333", NULL, NULL, NULL), -("B1", "pas", "ind", "Παρακείμενος", 'synt', NULL, 0, NULL, NULL, "έχω", "Ενεστώτας"), -("B1", "pas", "ind", "Υπερσυντέλικος", 'synt', NULL, 0, NULL, NULL, "έχω", "Παρατατικός"), -("B1", "pas", "ind", "Συντελεσμένος μέλλοντας", 'synt', NULL, 0, NULL, "θα", "έχω", "Ενεστώτας"), -("B1", "pas", "ind", "Μέλλοντας στιγμιαίος", 'aor', NULL, 15, "ffffff", "θα", NULL, NULL), --- Υποτακτική -("B1", "pas", "sub", "Ενεστώτας", 'pres', NULL, 28, "ffffff", "να", NULL, NULL), -("B1", "pas", "sub", "Αόριστος", 'aor', NULL, 15, "ffffff", "να", NULL, NULL), -("B1", "pas", "sub", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Παρατατικός"), --- Προστακτική -("B1", "pas", "imp", "Ενεστώτας", 'pres', NULL, 30, "-f--f-", "να", NULL, NULL), - -("B1", "pas", "imp", "Αόριστος", 'aor', NULL, 31, "-2----", NULL, NULL, NULL), -("B1", "pas", "imp", "Αόριστος", 'aor', NULL, 32, "----2-", NULL, NULL, NULL), - -("B1", "pas", "imp", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Παρατατικός"), --- Συζυγία Β΄ - β΄ τάξη --- Ενεργητηκή φωνή --- Οριστική -("B2", "act", "ind", "Ενεστώτας", 'pres', NULL, 15, "ffffff", NULL, NULL, NULL), -("B2", "act", "ind", "Παρατατικός", 'pres', "ούσ", 2, "ssssss", NULL, NULL, NULL), -("B2", "act", "ind", "Μέλλοντας διαρκείας", 'pres', NULL, 15, "ffffff", "θα", NULL, NULL), -("B2", "act", "ind", "Αόριστος", 'aor', "ησ", 2, "333333", NULL, NULL, NULL), -("B2", "act", "ind", "Παρακείμενος", 'synt', NULL, 0, NULL, NULL, "έχω", "Ενεστώτας"), -("B2", "act", "ind", "Υπερσυντέλικος", 'synt', NULL, 0, NULL, NULL, "έχω", "Παρατατικός"), -("B2", "act", "ind", "Συντελεσμένος μέλλοντας", 'synt', NULL, 0, NULL, "θα", "έχω", "Ενεστώτας"), -("B2", "act", "ind", "Μέλλοντας στιγμιαίος", 'aor', "ήσ", 1, "ssssss", "θα", NULL, NULL), --- Υποτακτική -("B2", "act", "sub", "Ενεστώτας", 'pres', NULL, 15, "ffffff", "να", NULL, NULL), -("B2", "act", "sub", "Αόριστος", 'aor', "ήσ", 1, "ssssss", "να", NULL, NULL), -("B2", "act", "sub", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Ενεστώτας"), --- Προστακτική -("B2", "act", "imp", "Ενεστώτας", 'pres', NULL, 15, "-f----", "να", NULL, NULL), -("B2", "act", "imp", "Ενεστώτας", 'pres', NULL, 15, "----f-", NULL, NULL, NULL), - -("B2", "act", "imp", "Αόριστος", 'aor', "ησ", 9, "-3--3-", NULL, NULL, NULL), -("B2", "act", "imp", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Ενεστώτας"), --- Μεσοπαθητική φωνή --- Οριστική -("B2", "pas", "ind", "Ενεστώτας", 'pres', NULL, 34, "ffffff", NULL, NULL, NULL), -("B2", "pas", "ind", "Παρατατικός", 'pres', NULL, 35, "ffffff", NULL, NULL, NULL), -("B2", "pas", "ind", "Μέλλοντας διαρκείας", 'pres', NULL, 34, "ffffff", "θα", NULL, NULL), -("B2", "pas", "ind", "Αόριστος", 'aor', "ηκ", 2, "333333", NULL, NULL, NULL), -("B2", "pas", "ind", "Παρακείμενος", 'synt', NULL, 0, NULL, NULL, "έχω", "Ενεστώτας"), -("B2", "pas", "ind", "Υπερσυντέλικος", 'synt', NULL, 0, NULL, NULL, "έχω", "Παρατατικός"), -("B2", "pas", "ind", "Συντελεσμένος μέλλοντας", 'synt', NULL, 0, NULL, "θα", "έχω", "Ενεστώτας"), -("B2", "pas", "ind", "Μέλλοντας στιγμιαίος", 'aor', NULL, 15, "ffffff", "θα", NULL, NULL), --- Υποτακτική -("B2", "pas", "sub", "Ενεστώτας", 'pres', NULL, 34, "ffffff", "να", NULL, NULL), -("B2", "pas", "sub", "Αόριστος", 'aor', NULL, 15, "ffffff", "να", NULL, NULL), -("B2", "pas", "sub", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Παρατατικός"), --- Προστακτική -("B2", "pas", "imp", "Ενεστώτας", 'pres', NULL, 36, "-f--f-", "να", NULL, NULL), - -("B2", "pas", "imp", "Αόριστος", 'aor', NULL, 31, "-2----", NULL, NULL, NULL), -("B2", "pas", "imp", "Αόριστος", 'aor', NULL, 32, "----2-", NULL, NULL, NULL), - -("B2", "pas", "imp", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Παρατατικός"); - -INSERT INTO participle VALUES --- Συζυγία Α' --- Ενεργητηκή φωνή -("A", "act", "Ενεστώτας", 'pres', NULL, "οντας", NULL), -("A", "act", "Παρακείμενος", 'aor', NULL, "ει", "εχοντας"), --- Μεσοπαθητική φωνή -("A", "pas", "Παρακείμενος", 'root', NULL, "μένος", NULL), --- Συζυγία Β΄ - α΄ τάξη --- Ενεργητηκή φωνή -("B1", "act", "Ενεστώτας", 'pres', NULL, "ώντας", NULL), -("B1", "act", "Παρακείμενος", 'aor', NULL, "ήσει", "εχοντας"), --- Μεσοπαθητική φωνή -("B1", "pass", "Παρακείμενος", 'pres', "η", "μένος", NULL), --- Συζυγία Β΄ - β΄ τάξη --- Ενεργητηκή φωνή -("B2", "act", "Ενεστώτας", 'pres', NULL, "ώντας", NULL), -("B2", "act", "Παρακείμενος", 'aor', NULL, "ει", "εχοντας"), --- Μεσοπαθητική φωνή -("B1", "pass", "Παρακείμενος", 'pres', "η", "μένος", NULL); - -DROP TABLE IF EXISTS verb; -CREATE TABLE verb( - verb varchar(128), -- REL 10 - conj char(2), -- REL 9 - augment char(1), - accmap char(7), - INDEX(verb) -); - -DROP TABLE IF EXISTS irregular_root; -CREATE TABLE irregular_root( - verb varchar(128), - voice enum('act','pas'), -- Ενεργητηκή/Μεσοπαθητική - thema enum('pres','aor','sub'), -- Αόριστος/Υποτακτική - root varchar(128) -); - -INSERT INTO verb VALUES -('βρίσκω', 'A', NULL, '000000'), -('θέλω','A','η',NULL), -('έχω','A',NULL,NULL), -('ξέρω','A','η',NULL) -; - -INSERT INTO irregular_root VALUES -('βρίσκω','act','aor','βρήκ'), -('βρίσκω','act','sub','βρ'), -('βρίσκω','pas','aor','βρέθ'), -('βρίσκω','pas','sub','βρέθ'), -('θέλω','act','aor','θέλησ'), -('έχω','act', 'aor', 'είχ') -; - -DROP TABLE IF EXISTS individual_verb; -CREATE TABLE individual_verb( - verb varchar(128), - voice enum('act','pas'), -- Ενεργητηκή/Μεσοπαθητική - mode enum('ind','sub','imp'), - tense varchar(128), - ident int(32), - INDEX(verb,voice,mode,tense) -); - -INSERT INTO individual_verb VALUES -("είμαι", "act", "ind", "Ενεστώτας", 100), -("είμαι", "act", "ind", "Παρατατικός", 101) -; +source dbverb.struct; +
\ No newline at end of file diff --git a/data/dbverb.struct b/data/dbverb.struct new file mode 100644 index 0000000..4ab6a37 --- /dev/null +++ b/data/dbverb.struct @@ -0,0 +1,323 @@ +set names utf8; +DROP TABLE IF EXISTS verbflect; +CREATE TABLE verbflect( + ident int(32) not null, -- REL 8 + sing1 varchar(32), + sing2 varchar(32), + sing3 varchar(32), + plur1 varchar(32), + plur2 varchar(32), + plur3 varchar(32), + UNIQUE(ident) +); + +DROP TABLE IF EXISTS conjugation; +CREATE TABLE conjugation( + conj char(2), -- REL 9 + voice enum('act','pas'), -- Ενεργητηκή/Μεσοπαθητική + mode enum('ind','sub','imp'), + tense varchar(128), + thema enum('pres','aor','sub','synt'), -- Ενεστώτα, Αόριστου, υποτακτικής, syntethic + suffix char(32), + flect int(32), -- REL 8 + accmap char(7), -- accent map + particle char(2), -- NULL/θα/να + aux varchar(128), -- REL 10 + auxtense char(32), + KEY (conj), + KEY (voice), + KEY (mode) +); + +DROP TABLE IF EXISTS participle; +CREATE TABLE participle ( + conj char(2), -- REL 9 + voice enum('act','pas'), -- Ενεργητηκή/Μεσοπαθητική + tense char(32), + thema enum('pres','aor','sub'), -- Ενεστώτα, Αόριστου, υποτακτικής + suffix char(32), + flect char(32), + aux varchar(128) +); + +INSERT INTO verbflect VALUES +(0, NULL, NULL, NULL, NULL, NULL, NULL), +-- Συζυγία Α' +(1, "ω", "εις", "ει", "ουμε", "ετε", "ουν(ε)"), +(2, "α", "ες", "ε", "αμε", "ατε", "αν"), +(8, NULL, "ε", NULL, NULL, "ετε", NULL), +(9, NULL, "ε", NULL, NULL, "τε", NULL), +(11, "ομαι", "εσαι", "εται", "όμαστε", "εστε", "ονται"), +(12, "όμουν", "όσουν", "όταν", "όμαστε", "όμαστε", "ονταν"), +(15, "ώ", "είς", "εί", "ούμε", "είτε", "ούν(ε)"), +(17, NULL, "ου", NULL, NULL, NULL, NULL), +(18, NULL, NULL, NULL, NULL, "είτε", NULL), +-- Συζυγία Β΄ - α΄ τάξη +(20, "ώ,άω", "άς", "ά,άει","άμε,ούμε","άτε","ούν(ε)"), +(25, NULL, "α", NULL, NULL, "άτε", NULL), +(28, "ιέμαι", "ιέσαι", "ιέται", "ιόμαστε", "ιέστε", "ιούνται"), +(29, "ιόμουν", "ιόσουν", "ιόταν", "ιόμαστε", "ιόσαστε", "ιόνταν"), +(30, NULL, "ιέσαι", NULL, NULL, "ιέσται", NULL), +(31, NULL, "ου", NULL, NULL, NULL, NULL), +(32, NULL, NULL, NULL, NULL, "είτε", NULL), +-- Συζυγία Β΄ - β΄ τάξη +(33, NULL, "είς", NULL, NULL, "είτε", NULL), +(34, "ούμαι", "είσαι", "είται", "ούμαστε", "είστε", "ούνται"), +(35, "ούμουν", "ούσουν", "ούvταν", "ούμαστε", "ούσαστε", "ούνταν"), +(36, NULL, "είσαι", NULL, NULL, "είστε", NULL), +(100, "είμαι", "είσαι", "είναι", "είμαστε", "είστε,είσαστε", "είναι"), +(101, "ήμουν(α)", "ήσουν(α)", "ήταν(ε)", "ήμαστε,ήμασταν", "ήσαστε,ήσασταν", "ήταν(ε)"), +(102, "θα είμαι", "θα είσαι", "θα είναι", "θα είμαστε", "θα είστε,θα είσαστε", "θα είναι"), +(103, "να είμαι", "να είσαι", "να είναι", "να είμαστε", "να είστε,να είσαστε", "να είναι"), +(104, NULL, "να είσαι", NULL, NULL, "να είστε", NULL), +(105, "είχα", "είχες", "είχα", "είχαμε", "είχατε", "είχαν"), +(106, NULL, "βρες", NULL, NULL, "βρείτε,βρεστε", NULL) +; + +INSERT INTO conjugation VALUES +-- Συζυγία Α' +-- Ενεργητηκή φωνή +-- Οριστική +("A", "act", "ind", "Ενεστώτας", 'pres', NULL, 1, "000000", NULL, NULL, NULL), +("A", "act", "ind", "Παρατατικός", 'pres', NULL, 2, "333333+", NULL, NULL, NULL), +("A", "act", "ind", "Μέλλοντας διαρκείας", 'pres', NULL, 1, "000000", "θα", NULL, NULL), +("A", "act", "ind", "Αόριστος", 'aor', NULL, 2, "333333+", NULL, NULL, NULL), +("A", "act", "ind", "Παρακείμενος", 'synt', NULL, 0, NULL, NULL, "έχω", "Ενεστώτας"), +("A", "act", "ind", "Υπερσυντέλικος", 'synt', NULL, 0, NULL, NULL, "έχω", "Παρατατικός"), +("A", "act", "ind", "Συντελεσμένος μέλλοντας", 'synt', NULL, 0, NULL, "θα", "έχω", "Ενεστώτας"), +("A", "act", "ind", "Μέλλοντας στιγμιαίος", 'sub', NULL, 1, "000000", "θα", NULL, NULL), +-- Υποτακτική +("A", "act", "sub", "Ενεστώτας", 'pres', NULL, 1, "000000", "να", NULL, NULL), +("A", "act", "sub", "Αόριστος", 'sub', NULL, 1, "000000", "να", NULL, NULL), +("A", "act", "sub", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Ενεστώτας"), +-- Προστακτική +("A", "act", "imp", "Ενεστώτας", 'pres', NULL, 8, "-3--3-", NULL, NULL, NULL), +("A", "act", "imp", "Αόριστος", 'sub', NULL, 9, "-0--0-", NULL, NULL, NULL), +("A", "act", "imp", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Ενεστώτας"), +-- Μεσοπαθητική φωνή +-- Οριστική +("A", "pas", "ind", "Ενεστώτας", 'pres', NULL, 11, "000300", NULL, NULL, NULL), +("A", "pas", "ind", "Παρατατικός", 'pres', NULL, 12, "222333", NULL, NULL, NULL), +("A", "pas", "ind", "Μέλλοντας διαρκείας", 'pres', NULL, 11, "333333", "θα", NULL, NULL), +("A", "pas", "ind", "Αόριστος", 'aor', "ηκ", 2, "333333", NULL, NULL, NULL), +("A", "pas", "ind", "Παρακείμενος", 'synt', NULL, 0, NULL, NULL, "έχω", "Ενεστώτας"), +("A", "pas", "ind", "Υπερσυντέλικος", 'synt', NULL, 0, NULL, NULL, "έχω", "Παρατατικός"), +("A", "pas", "ind", "Συντελεσμένος μέλλοντας", 'synt', NULL, 0, NULL, "θα", "έχω", "Ενεστώτας"), +("A", "pas", "ind", "Μέλλοντας στιγμιαίος", 'aor', NULL, 15, "111111", "θα", NULL, NULL), +-- Υποτακτική +("A", "pas", "sub", "Ενεστώτας", 'pres', NULL, 11, "333333", "να", NULL, NULL), +("A", "pas", "sub", "Αόριστος", 'aor', NULL, 15, "111221", "να", NULL, NULL), +("A", "pas", "sub", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Παρατατικός"), +-- Προστακτική +("A", "pas", "imp", "Ενεστώτας", 'pres', NULL, 11, "-3--3-", "να", NULL, NULL), +("A", "pas", "imp", "Αόριστος", 'aor', NULL, 17, "-0----", NULL, NULL, NULL), +("A", "pas", "imp", "Αόριστος", 'aor', NULL, 18, "----2-", NULL, NULL, NULL), +("A", "pas", "imp", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Παρατατικός"), +-- Συζυγία Β΄ - α΄ τάξη +-- Ενεργητηκή φωνή +-- Οριστική +("B1", "act", "ind", "Ενεστώτας", 'pres', NULL, 20, "ffffff", NULL, NULL, NULL), +("B1", "act", "ind", "Παρατατικός", 'pres', "ούς", 2, "ssssss", NULL, NULL, NULL), +("B1", "act", "ind", "Μέλλοντας διαρκείας", 'pres', NULL, 20, "ffffff", "θα", NULL, NULL), +("B1", "act", "ind", "Αόριστος", 'aor', "ησ", 2, "333333", NULL, NULL, NULL), +("B1", "act", "ind", "Παρακείμενος", 'synt', NULL, 0, NULL, NULL, "έχω", "Ενεστώτας"), +("B1", "act", "ind", "Υπερσυντέλικος", 'synt', NULL, 0, NULL, NULL, "έχω", "Παρατατικός"), +("B1", "act", "ind", "Συντελεσμένος μέλλοντας", 'synt', NULL, 0, NULL, "θα", "έχω", "Ενεστώτας"), +("B1", "act", "ind", "Μέλλοντας στιγμιαίος", 'aor', "ήσ", 1, "ssssss", "θα", NULL, NULL), +-- Υποτακτική +("B1", "act", "sub", "Ενεστώτας", 'pres', NULL, 20, "ffffff", "να", NULL, NULL), +("B1", "act", "sub", "Αόριστος", 'aor', "ήσ", 1, "ssssss", "να", NULL, NULL), +("B1", "act", "sub", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Ενεστώτας"), +-- Προστακτική +("B1", "act", "imp", "Ενεστώτας", 'pres', NULL, 25, "-0--2-", NULL, NULL, NULL), +("B1", "act", "imp", "Αόριστος", 'aor', "ησ", 9, "-3--3-", NULL, NULL, NULL), +("B1", "act", "imp", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Ενεστώτας"), +-- Μεσοπαθητική φωνή +-- Οριστική +("B1", "pas", "ind", "Ενεστώτας", 'pres', NULL, 28, "ffffff", NULL, NULL, NULL), +("B1", "pas", "ind", "Παρατατικός", 'pres', NULL, 29, "ffffff", NULL, NULL, NULL), +("B1", "pas", "ind", "Μέλλοντας διαρκείας", 'pres', NULL, 28, "ffffff", "θα", NULL, NULL), +("B1", "pas", "ind", "Αόριστος", 'aor', "ηκ", 2, "333333", NULL, NULL, NULL), +("B1", "pas", "ind", "Παρακείμενος", 'synt', NULL, 0, NULL, NULL, "έχω", "Ενεστώτας"), +("B1", "pas", "ind", "Υπερσυντέλικος", 'synt', NULL, 0, NULL, NULL, "έχω", "Παρατατικός"), +("B1", "pas", "ind", "Συντελεσμένος μέλλοντας", 'synt', NULL, 0, NULL, "θα", "έχω", "Ενεστώτας"), +("B1", "pas", "ind", "Μέλλοντας στιγμιαίος", 'aor', NULL, 15, "ffffff", "θα", NULL, NULL), +-- Υποτακτική +("B1", "pas", "sub", "Ενεστώτας", 'pres', NULL, 28, "ffffff", "να", NULL, NULL), +("B1", "pas", "sub", "Αόριστος", 'aor', NULL, 15, "ffffff", "να", NULL, NULL), +("B1", "pas", "sub", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Παρατατικός"), +-- Προστακτική +("B1", "pas", "imp", "Ενεστώτας", 'pres', NULL, 30, "-f--f-", "να", NULL, NULL), + +("B1", "pas", "imp", "Αόριστος", 'aor', NULL, 31, "-2----", NULL, NULL, NULL), +("B1", "pas", "imp", "Αόριστος", 'aor', NULL, 32, "----2-", NULL, NULL, NULL), + +("B1", "pas", "imp", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Παρατατικός"), +-- Συζυγία Β΄ - β΄ τάξη +-- Ενεργητηκή φωνή +-- Οριστική +("B2", "act", "ind", "Ενεστώτας", 'pres', NULL, 15, "ffffff", NULL, NULL, NULL), +("B2", "act", "ind", "Παρατατικός", 'pres', "ούσ", 2, "ssssss", NULL, NULL, NULL), +("B2", "act", "ind", "Μέλλοντας διαρκείας", 'pres', NULL, 15, "ffffff", "θα", NULL, NULL), +("B2", "act", "ind", "Αόριστος", 'aor', "ησ", 2, "333333", NULL, NULL, NULL), +("B2", "act", "ind", "Παρακείμενος", 'synt', NULL, 0, NULL, NULL, "έχω", "Ενεστώτας"), +("B2", "act", "ind", "Υπερσυντέλικος", 'synt', NULL, 0, NULL, NULL, "έχω", "Παρατατικός"), +("B2", "act", "ind", "Συντελεσμένος μέλλοντας", 'synt', NULL, 0, NULL, "θα", "έχω", "Ενεστώτας"), +("B2", "act", "ind", "Μέλλοντας στιγμιαίος", 'aor', "ήσ", 1, "ssssss", "θα", NULL, NULL), +-- Υποτακτική +("B2", "act", "sub", "Ενεστώτας", 'pres', NULL, 15, "ffffff", "να", NULL, NULL), +("B2", "act", "sub", "Αόριστος", 'aor', "ήσ", 1, "ssssss", "να", NULL, NULL), +("B2", "act", "sub", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Ενεστώτας"), +-- Προστακτική +("B2", "act", "imp", "Ενεστώτας", 'pres', NULL, 15, "-f----", "να", NULL, NULL), +("B2", "act", "imp", "Ενεστώτας", 'pres', NULL, 15, "----f-", NULL, NULL, NULL), + +("B2", "act", "imp", "Αόριστος", 'aor', "ησ", 9, "-3--3-", NULL, NULL, NULL), +("B2", "act", "imp", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Ενεστώτας"), +-- Μεσοπαθητική φωνή +-- Οριστική +("B2", "pas", "ind", "Ενεστώτας", 'pres', NULL, 34, "ffffff", NULL, NULL, NULL), +("B2", "pas", "ind", "Παρατατικός", 'pres', NULL, 35, "ffffff", NULL, NULL, NULL), +("B2", "pas", "ind", "Μέλλοντας διαρκείας", 'pres', NULL, 34, "ffffff", "θα", NULL, NULL), +("B2", "pas", "ind", "Αόριστος", 'aor', "ηκ", 2, "333333", NULL, NULL, NULL), +("B2", "pas", "ind", "Παρακείμενος", 'synt', NULL, 0, NULL, NULL, "έχω", "Ενεστώτας"), +("B2", "pas", "ind", "Υπερσυντέλικος", 'synt', NULL, 0, NULL, NULL, "έχω", "Παρατατικός"), +("B2", "pas", "ind", "Συντελεσμένος μέλλοντας", 'synt', NULL, 0, NULL, "θα", "έχω", "Ενεστώτας"), +("B2", "pas", "ind", "Μέλλοντας στιγμιαίος", 'aor', NULL, 15, "ffffff", "θα", NULL, NULL), +-- Υποτακτική +("B2", "pas", "sub", "Ενεστώτας", 'pres', NULL, 34, "ffffff", "να", NULL, NULL), +("B2", "pas", "sub", "Αόριστος", 'aor', NULL, 15, "ffffff", "να", NULL, NULL), +("B2", "pas", "sub", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Παρατατικός"), +-- Προστακτική +("B2", "pas", "imp", "Ενεστώτας", 'pres', NULL, 36, "-f--f-", "να", NULL, NULL), + +("B2", "pas", "imp", "Αόριστος", 'aor', NULL, 31, "-2----", NULL, NULL, NULL), +("B2", "pas", "imp", "Αόριστος", 'aor', NULL, 32, "----2-", NULL, NULL, NULL), + +("B2", "pas", "imp", "Παρακείμενος", 'synt', NULL, 0, NULL, "να", "έχω", "Παρατατικός"); + +INSERT INTO participle VALUES +-- Συζυγία Α' +-- Ενεργητηκή φωνή +("A", "act", "Ενεστώτας", 'pres', NULL, "οντας", NULL), +("A", "act", "Παρακείμενος", 'aor', NULL, "ει", "εχοντας"), +-- Μεσοπαθητική φωνή +("A", "pas", "Παρακείμενος", 'root', NULL, "μένος", NULL), +-- Συζυγία Β΄ - α΄ τάξη +-- Ενεργητηκή φωνή +("B1", "act", "Ενεστώτας", 'pres', NULL, "ώντας", NULL), +("B1", "act", "Παρακείμενος", 'aor', NULL, "ήσει", "εχοντας"), +-- Μεσοπαθητική φωνή +("B1", "pass", "Παρακείμενος", 'pres', "η", "μένος", NULL), +-- Συζυγία Β΄ - β΄ τάξη +-- Ενεργητηκή φωνή +("B2", "act", "Ενεστώτας", 'pres', NULL, "ώντας", NULL), +("B2", "act", "Παρακείμενος", 'aor', NULL, "ει", "εχοντας"), +-- Μεσοπαθητική φωνή +("B1", "pass", "Παρακείμενος", 'pres', "η", "μένος", NULL); + +DROP TABLE IF EXISTS verb; +CREATE TABLE verb( + verb varchar(128), -- REL 10 + conj char(2), -- REL 9 + augment char(1), + accmap char(7), + suffix_aor_path varchar(2), + INDEX(verb) +); + +DROP TABLE IF EXISTS irregular_root; +CREATE TABLE irregular_root( + verb varchar(128), + voice enum('act','pas'), -- Ενεργητηκή/Μεσοπαθητική + thema enum('pres','aor','sub'), -- Αόριστος/Υποτακτική + root varchar(128) +); + +INSERT INTO verb VALUES +('βρίσκω', 'A', NULL, '000000', NULL), +('θέλω','A','η',NULL, NULL), +('έχω','A',NULL,'000000', NULL), +('ξέρω','A','η',NULL, NULL), +('κρεμάω','B1',NULL,NULL,"ασ"), +('κρεμώ','B1',NULL,NULL,"ασ"), +('κιτάω','B1',NULL,NULL,"αξ"), +('κιτώ','B1',NULL,NULL,"αξ"), +('τραβάω','B1',NULL,NULL,"ηξ"), +('τραβώ','B1',NULL,NULL,"ηξ"), +('νικώ','B1',NULL,NULL,NULL) +; + +INSERT INTO irregular_root VALUES +('βρίσκω','act','aor','βρήκ'), +('βρίσκω','act','sub','βρ'), +('βρίσκω','pas','aor','βρέθ'), +('βρίσκω','pas','sub','βρέθ'), +('θέλω','act','aor','θέλησ') +; + +DROP TABLE IF EXISTS individual_verb; +CREATE TABLE individual_verb( + verb varchar(128), + voice enum('act','pas'), -- Ενεργητηκή/Μεσοπαθητική + mode enum('ind','sub','imp'), + tense varchar(128), + ident int(32), + INDEX(verb,voice,mode,tense) +); + +INSERT INTO individual_verb VALUES +("είμαι", "act", "ind", "Ενεστώτας", 100), +("είμαι", "act", "ind", "Παρατατικός", 101), +("είμαι", "act", "ind", "Μέλλοντας διαρκείας", 102), +("είμαι", "act", "ind", "Αόριστος", 0), +("είμαι", "act", "ind", "Παρακείμενος", 0), +("είμαι", "act", "ind", "Υπερσυντέλικος", 0), +("είμαι", "act", "ind", "Συντελεσμένος μέλλοντας", 0), +("είμαι", "act", "ind", "Μέλλοντας στιγμιαίος", 0), +("είμαι", "act", "sub", "Ενεστώτας", 103), +("είμαι", "act", "sub", "Αόριστος", 0), +("είμαι", "act", "sub", "Παρακείμενος", 0), +("είμαι", "act", "imp", "Ενεστώτας", 104), +("είμαι", "act", "imp", "Αόριστος", 0), +("είμαι", "act", "imp", "Παρακείμενος", 0), +("είμαι", "pas", "ind", "Ενεστώτας", 0), +("είμαι", "pas", "ind", "Παρατατικός", 0), +("είμαι", "pas", "ind", "Μέλλοντας διαρκείας", 0), +("είμαι", "pas", "ind", "Αόριστος", 0), +("είμαι", "pas", "ind", "Παρακείμενος", 0), +("είμαι", "pas", "ind", "Υπερσυντέλικος", 0), +("είμαι", "pas", "ind", "Συντελεσμένος μέλλοντας", 0), +("είμαι", "pas", "ind", "Μέλλοντας στιγμιαίος", 0), +("είμαι", "pas", "sub", "Ενεστώτας", 0), +("είμαι", "pas", "sub", "Αόριστος", 0), +("είμαι", "pas", "sub", "Παρακείμενος", 0), +("είμαι", "pas", "imp", "Ενεστώτας", 0), +("είμαι", "pas", "imp", "Αόριστος", 0), +("είμαι", "pas", "imp", "Παρακείμενος", 0), + +("έχω", "act", "ind", "Παρατατικός", 105), +("έχω", "act", "ind", "Αόριστος", 0), +("έχω", "act", "ind", "Παρακείμενος", 0), +("έχω", "act", "ind", "Υπερσυντέλικος", 0), +("έχω", "act", "ind", "Συντελεσμένος μέλλοντας", 0), +("έχω", "act", "ind", "Μέλλοντας στιγμιαίος", 0), +("έχω", "act", "sub", "Αόριστος", 0), +("έχω", "act", "sub", "Παρακείμενος", 0), +("έχω", "act", "imp", "Αόριστος", 0), +("έχω", "act", "imp", "Παρακείμενος", 0), +("έχω", "pas", "ind", "Παρατατικός", 0), +("έχω", "pas", "ind", "Μέλλοντας διαρκείας", 0), +("έχω", "pas", "ind", "Αόριστος", 0), +("έχω", "pas", "ind", "Παρακείμενος", 0), +("έχω", "pas", "ind", "Υπερσυντέλικος", 0), +("έχω", "pas", "ind", "Συντελεσμένος μέλλοντας", 0), +("έχω", "pas", "ind", "Μέλλοντας στιγμιαίος", 0), +("έχω", "pas", "sub", "Ενεστώτας", 0), +("έχω", "pas", "sub", "Αόριστος", 0), +("έχω", "pas", "sub", "Παρακείμενος", 0), +("έχω", "pas", "imp", "Ενεστώτας", 0), +("έχω", "pas", "imp", "Αόριστος", 0), +("έχω", "pas", "imp", "Παρακείμενος", 0), +("βρίσκω", "act", "imp", "Αόριστος", 106) +; diff --git a/scm/conjugator.scm b/scm/conjugator.scm index 99f5189..4f1eccd 100644 --- a/scm/conjugator.scm +++ b/scm/conjugator.scm @@ -49,13 +49,32 @@ (define (guess-verb-info verb) - (let ((elverb (string->elstr verb))) + (let ((elverb (force-elstr verb))) (cond + ;; FIXME + ((elstr-suffix? elverb "άω") + (list "B1" + #f + #f + "ησ" + #f + #f)) + ((elstr-suffix? elverb "ώ") + (list "B2" + #f + #f + "ησ" + #f + #f)) (else - (let ((root (elstr-trim elverb -1))) - (list "A" - #f - "ε" - #f)))))) + (list "A" + #f + "ε" + #f + #f + #f))))) -(define (get-verb-info verb) - (let ((conn (dict-connect))) +(define (get-verb-info verb . rest) + (let ((conn (dict-connect)) + (class (if (null? rest) + "" + (string-append " AND conj='" (car rest) "'")))) (let ((vdb (my-sql-query @@ -63,16 +82,55 @@ (string-append - "SELECT conj,accmap,augment FROM verb \ -WHERE verb='" verb "'")))) - (if (null? vdb) - (guess-verb-info verb) - (let ((x (car vdb))) - (list - (list-ref x 0) - (list-ref x 1) - (or (list-ref x 2) "ε") - #f)))))) + "SELECT conj,accmap,augment,suffix_aor_path FROM verb \ +WHERE verb='" (force-string verb) "'" + class)))) + (cond + ((and vdb (not (null? vdb))) + (let ((x (car vdb))) + (list + (list-ref x 0) + (list-ref x 1) + (or (list-ref x 2) "ε") + (list-ref x 3) + #f + '(class)))) + ((elstr-suffix? (force-elstr verb) "άω") + (get-verb-info (elstr-append + (elstr-trim (force-elstr verb) -2) "ώ") "B1")) + (else + (guess-verb-info verb)))))) +(define (thema-aoristoy-mesapathitikis root) + (cond + ((elstr-suffix? root "αίν") + (elstr-append (elstr-trim root -3) "ανθ")) ;; FIXME: Also αθ, ηθ + ((and + (elstr-suffix? root "ν") + (logand (elstr-char-prop-bitmask root -2) elmorph:vowel)) + (elstr-append (elstr-trim root -1) "θ")) ;; FIXME: also στ, νθ, θ + ((and + (elstr-suffix? root "δ" "θ" "ζ" "ν") ;; FIXME: see above + (logand (elstr-char-prop-bitmask root -2) elmorph:vowel)) + (elstr-append (elstr-trim root -1) "στ")) + ((elstr-suffix? root "γγ" "σσ" "ττ" "χν" "γ" "ζ" "κ" "χ") => + (lambda (suf) + (elstr-append (elstr-trim root (- 0 (elstr-length (string->elstr suf)))) + "χτ"))) ;; also χθ + ((elstr-suffix? root "π" "β" "φ" "πτ" "φτ") => + (lambda (suf) + (elstr-append (elstr-trim root (- 0 (elstr-length (string->elstr suf)))) + "φτ"))) ;; also φθ + ((elstr-suffix? root "αύ" "εύ") => + (lambda (suf) + (elstr-append root "τ"))) + ((elstr-suffix? root "άρ" "ίρ") + ((elstr-append root "ιστ"))) + ((logand (elstr-char-prop-bitmask root -1) elmorph:vowel) + (elstr-append root "θ")) + (else + #f))) + (define (complement-verb-info vinfo verb voice thema) ; (format #t "COMPLEMENT ~S~%" thema) - (let ((result (my-sql-query + (let ((elverb (string->elstr verb)) + (result (my-sql-query (dict-connect) @@ -81,13 +139,43 @@ WHERE verb='" verb "'")))) WHERE verb='" verb "' AND voice='" voice "' AND thema='" thema "'")))) - (list-set! vinfo 3 - (if (not (null? result)) - (caar result) - (let ((root (elstr-trim (string->elstr verb) -1))) - (cond - ((string=? thema "pres") - root) - ((or (string=? thema "aor") (string=? thema "sub")) - (elstr-thema-aoristoy root)) - (else - #f))))))) + (verb-info-set! #:root vinfo + (cond + ((not (null? result)) + (verb-info-set! #:attested vinfo 'root) + (caar result)) + ((string=? (verb-info #:conj vinfo) "A") + (let ((root (elstr-trim elverb -1))) + (cond + ((string=? thema "pres") + (verb-info-set! #:attested vinfo 'root) + root) + ((or (string=? thema "aor") (string=? thema "sub")) + (if (string=? voice "act") + (elstr-thema-aoristoy root) + (thema-aoristoy-mesapathitikis root))) + (else + #f)))) + ((string=? (verb-info #:conj vinfo) "B1") + (let ((root (if (elstr-suffix? elverb "άω") + (elstr-trim elverb -2) + (elstr-trim elverb -1)))) + (cond + ((or (string=? voice "act") (string=? thema "pres")) + (verb-info-set! #:attested vinfo 'root) + root) + ((or (string=? thema "aor") (string=? thema "sub")) + (elstr-append root "ηθ")) ;; FIXME: guesswork + (else + #f)))) + ((string=? (verb-info #:conj vinfo) "B2") + (let ((root (elstr-trim elverb -1))) + (cond + ((or (string=? voice "act") (string=? thema "pres")) + (verb-info-set! #:attested vinfo 'root) + root) + ((or (string=? thema "aor") (string=? thema "sub")) + (elstr-append root "ηθ")) ;; FIXME: guesswork + (else + #f)))) + (else + #f))))) @@ -101,4 +189,27 @@ WHERE verb='" verb "' AND voice='" voice "' AND thema='" thema "'")))) (list-ref v 2)) + ((verb-info #:suffix v) + (list-ref v 3)) ((verb-info #:root v) - (list-ref v 3)))) + (list-ref v 4)) + ((verb-info #:attested v) + (list-ref v 5)))) + +(define-syntax verb-info-set! + (syntax-rules () + ((verb-info-set! #:root v val) + (list-set! v 4 val)) + ((verb-info-set! #:attested v val) + (list-set! v 5 + (if (not val) + val + (let ((oldval (list-ref v 5))) + (cond + ((not oldval) + (list val)) + ((boolean? oldval) + (list val)) |