Hallo,
Beispielimplementierung:
var Detf = ['la', 'une'];
var Detm = ['le', 'un'];
var Nf = ['fille'];
var Nm = ['soleil', 'vent', 'garçon'];
var Vi = ['brille', 'chante'];
var Vt = ['sent', 'voit', 'chante'];
// Mögliche Grammatiken in einem Array of Arrays
var grammars = [
[Detf, Nf, Vi],
[Detm, Nm, Vi],
[Detf, Nf, Vt, Detm, Nm],
[Detf, Nf, Vt, Detf, Nf],
[Detm, Nm, Vt, Detm, Nm],
[Detm, Nm, Vt, Detf, Nf]
];
var string = 'Le soleil voit la fille';
//var string = window.prompt('Satz eingeben');
// Vorbereitung des Strings, entfernen aller Nicht-Buchstaben, wandle in Kleinschreibung um
string = string.toLowerCase().replace(/[^a-z\s]/g, '');
// Splitten an Leerzeichen (Whitespace), sodass ein Array entsteht
var words = string.split(/\s+/);
// Words ist jetzt ein Array of Strings: ['le', 'soleil', 'voit', 'la', 'fille']
// Durchlaufe die möglichen grammars, bis die Iterator-Funktion true zurückgibt
var valid = grammars.some(function(grammar) {
// Durchlaufe alle Worte, jedes Mal muss die Iterator-Funktion true zurückgeben
return words.every(function(word, index) {
// Prüfe, ob das Wort in dem jeweiligen Wortart-Array enthalten ist
var lexicalClass = grammar[index];
return lexicalClass.indexOf(word) > -1;
});
});
alert(valid);
Hier wird mit ECMAScript-5-Funktionen gearbeitet, die in neueren Browsern verfügbar sind.
some – Durchläuft eine Liste, führt für jedes Element die angegebene Funktion aus. Wenn die Funktion für ein Element true zurückgibt, wird abgebrochen und true zurückgegeben, ansonsten false. (Kriterium muss für ein Element zutreffen.)
every – Durchläuft eine Liste, führt für jedes Element die angegebene Funktion aus. Wenn die Funktion für alle Elemente true zurückgibt, wird true zurückgegeben, ansonsten false. (Kriterium muss für alle Elemente zutreffen.)
indexOf – Gibt den index des angegebenen Elements im Array zurück. Falls der Wert nicht im Array enthalten ist, wird -1 zurückgegeben.
Grüße
Mathias