Parser: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Zeile 19: | Zeile 19: | ||
Diese Implementierungsvariante wird auch im '''Zentralabitur''' verlangt, d.h. man sollte sie <u>mindestens lesen</u> können. | Diese Implementierungsvariante wird auch im '''Zentralabitur''' verlangt, d.h. man sollte sie <u>mindestens lesen</u> können. | ||
<code> | <code> | ||
Zeile 75: | Zeile 71: | ||
} | } | ||
} | } | ||
</code> | </code> |
Version vom 13. September 2015, 12:35 Uhr
Ein Parser zu einer Grammatik ist ein Algorithmus, mit dem sich überprüfen lässt, ob ein Wort zu der von der Grammatik erzeugten Sprache gehört, d.h. ob es syntaktisch korrekt ist. Der Algorithmus lässt sich dann z.B. in Java implementieren.
Ein Parser simuliert den zu der Grammatik gehörenden Automaten.
Beispiel
Es soll ein Parser für den KGB-Automaten (siehe rechts) erstellt werden.
Der KGB-Automat erkennt Wörter, die nur aus den Ziffern 0,...,9 bestehen und die irgendwo die Zahlenkette "007" enhalten.
Implementierung mit switch-case
Die Implementierung mit switch-case bildet den Automaten ab.
Diese Implementierungsvariante wird auch im Zentralabitur verlangt, d.h. man sollte sie mindestens lesen können.
import gui.GUI;
public class KGBAutomat {
private char[] alphabet = {'0', '1', '2','3','4','5','6','7','8','9'};
public boolean imAlphabet(char pZeichen){
for(char zeichen: alphabet){
if(zeichen == pZeichen){
return true;
}
}
return false;
}
public boolean parse(String pWort){
char zustand = 'S';
for(char zeichen: pWort.toCharArray()){
if(!imAlphabet(zeichen)){
return false;
}
switch(zustand){
case 'S': switch(zeichen){
case '0': zustand = 'A'; continue;
default: zustand = 'S'; continue;
}
case 'A': switch(zeichen){
case '0': zustand = 'B'; continue;
default: zustand = 'S'; continue;
}
case 'B': switch(zeichen){
case '0': zustand = 'B'; continue;
case '7': zustand = 'C'; continue;
default: zustand = 'S'; continue;
}
case 'C': switch(zeichen){
default: zustand = 'C'; continue;
}
}
}
return (zustand == 'C');
}
public static void main(String[] args) {
new GUI(new KGBAutomat());
}
}