c.freund: linguistischer syntaxparser javascript

Hi ich bin absoluter Laie und versuche für eine Unihausarbeit einen simplen Syntax Parser zu programmieren. Kann ich das irgendwie hinkriegen das, wenn ein beliebiger Wert aus einem bestimmten Array in die Eingabe eingegeben wird, es eine positive Meldung gibt? (Und wenn die Reihenfolge oder die Eingabe falsch ist, eine negative.)

<body>  
<script type = "text/javascript">   //Eingabeaufforderung  
document.write("<br>________________________<br>");  
var Eingabe = prompt("Geben Sie einen Satz ein, der aus den obenstehenden Wörtern gebildet ist, um auf  
  
Grammatikalität zu prüfen.","le soleil brille");  
document.write("Ihre Eingabe lautete: "); document.write(Eingabe);  
document.write("<br>________________________<br>");  
  
  
//Tagging  
var Detf = new Array ("la", "une");  
var Detm = new Array ("le", "un");  
var Nf = new Array ("fille");  
var Nm = new Array ("soleil", "vent", "garçon");  
var Vi = new Array ("brille", "chante");  
var Vt = new Array ("sent", "voit", "chante");  
  
  
  
/* if (Eingabe == Detf, Nf, Vi)  
if (Eingabe == Detm, Nm, Vi)  
if (Eingabe == Detf, Nf, Vt, Detm, Nm)  
if (Eingabe == Detf, Nf, Vt, Detf, Nf)  
if (Eingabe == Detm, Nm, Vt, Detm, Nm)  
if (Eingabe == Detm, Nm, Vt, Detf, Nf)  
{document.write("Ihre Eingabe ist syntaktisch korrekt.")}  
else {document.write("Diese Eingabe ist grammatikalisch nicht korrekt.")}; */
  1. 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

    1. Vielen Dank,
      dass du dir Zeit genommen hast!
      das hat mir geholfen, kann geschlossen werden!