LLG 1.07 Alpha - LLg 1.07 Alpha

LLG 1.07 Alpha

Sponsored Links

LLG 1.07 Alpha: Zusammenfassung

Rang Klicken Sie auf den Stern auf RangRanking-Ebene:
Overall ranking: 0 (0 times) Herunterladen
Dateigröße: 0.020 MB Flatform: Any Platform Liscense: Perl Artistic License Preis: Download-Zahl: 8867 Datum: 2007-07-16 Verlag: Optenet Verlag URL: http://www.optenetpc.com/

LLG 1.07 Alpha: Beschreibung

LLg ist ein rekursiver Sinkflugsyntaxanalysengenerator.

SYNOPSE

LLg verwenden;
@tokens = (
ADDOP => [- +],
LEFTP => [(],
RIGHTP => [)],
GANZE ZAHL => 0|[1-9] [0-9] *,
);
$reader = Lex->new (@tokens);
$ADDOP->debug;

$expr = And->new (($factor, Any->new ($ADDOP, $factor)),
Unterseeboot {
Schiebung (@_);
mein $result = Schiebung (@_);
mein ($op, $integer);
während ($#_ >= 0) {
($op, $integer) = (Schiebung (@_), Schiebung (@_));
wenn ($op eq +) {
$result += $integer;
} sonst {
$result - = $integer;
}
}
$result;
});
$factor = Or->new ($INTEGER, $parexp);
$parexp = And->new ($LEFTP, $expr, $RIGHTP,
Unterseeboot {$_ [2]});

Druck STDERR „Typ Ihr arithmetischer Ausdruck: “;
Druck „Resultat: “, $expr->next, „N“;

Syntaxanalysen zu erstellen ist eigenhändig sogar für einfache Sprachen langwierig. Diese Aktivität kann durch Syntaxanalysegeneratoren automatisiert werden - yacc ist ein weithin bekanntes Beispiel. Aber, solche Werkzeuge zu verwenden ist ziemlich fordernd und erfordert angemessenen Kenntnisse der Grundregeln der syntaktischen Analyse.

LLg ist eine Einstellung Pakete Perl5, die das Erzeugung der rekursiven Sinkflugsyntaxanalysen für kontextfreie Grammatiken erlauben.

LLg wird mit den Paketen Lex und Zeichen versehen, die Nachricht-gegründet werden. Der Gebrauch von diesen Paketen setzt voraus, dass Sie eine BNF Grammatik schreiben können und dass Sie (gerade wenig) in der Programmierung in Perl auskennen.

Das Spezifizieren der Syntaxanalyse erfordert keine Extension zur Perl-Syntax. Die Bedingung wird völlig in Standardperl, sei es Definition der Zeichen, der syntaktischen Richtlinien oder der dazugehörigen semantischen Maßnahmen durchgeführt. LLg erlaubt die einfache Bedingung der Übersetzungsentwürfe, die ist Syntaxanalysen, für die die semantischen Maßnahmen durch die Maßnahmen gegeben werden, die direkt mit jeder Produktion verbunden sind.

Das Pakete Zeichen und das LLg erlauben beziehungsweise die Definition der Nachrichten, die Flughafengebäuden (Zeichen) entsprechen und Nichtflughafengebäuden der Grammatik. Lex handhabt die Anzeige und „das Essen“ der Zeichen im Eingabestrom.

Vor der Anwendung dieser Pakete, müssen Sie eine BNF Grammatik ohne linke Rekursion (ein LL (1) Grammatik) definieren. Dieses gegeben, besteht die Herstellung der Syntaxanalyse in:

1. ein lexikalisches Analysegerät herstellen, indem Sie die Flughafengebäude spezifizieren,
2. eine Syntaxanalyse (syntaktisches Analysegerät) indem Sie eine LLg Nachricht (oder, genau, eins der Pakete, die von LLg übernimmt), für Nichtterminal jedes erstellen erstellen.
3. die Semantik definieren, indem Sie eine anonyme Funktion mit jeder LLg Nachricht dazugehören.

Die arithmetischen Ausdrücke als Beispiel nur nehmen, die + und - als Bediener haben. Im Kamelbuch finden wir die folgende Grammatik:

expr:: = Faktor {ADDOP Faktor}
ADDOP:: = + | -
Faktor:: = ZAHL | (expr)

Das Erstellen der Syntaxanalyse für diese Sprache bezieht mit ein, ein lexikalisches Analysegerät und ein syntaktisches Analysegerät zu definieren.

Das lexikalische Analysegerät wird thusly definiert:

@tokens = (
ADDOP => [- +],
LEFTP => [(],
RIGHTP => [)],
GANZE ZAHL => [1-9] [0-9] *,
);
$reader = Lex->new (@tokens);

Das Argument der neuen Methode () ist eine Liste von Paaren: die Identität des Flughafengebäudes und des entsprechenden regulären Ausdrucks. Jedes solche Paar führt zu die Kreation eines Flughafengebäudes des Typen Zeichen.

Das Paket LLg ist das falsche Paket einer Einstellung: Und, irgendwelche, tun Haken, zu entscheiden oder. Diese Pakete erlauben die Kreation der verschiedenen Typen der Richtlinien, die normalerweise in den kontextfreien Grammatiken gefunden werden. Wir verwenden eine Vorzeichendarstellung mit den folgenden Gleichwertigkeiten.

A | B Or->new ($A, $B) Symbol A oder Symbol B


Ein b And->new ($A, $B) Symbol A gefolgt von Symbol B


{A} Any->new ($A) willkürliche Zahl von A


[A] Opt->new ($A) null oder ein Vorkommen von A

Die Richtlinien in unserem Beispiel werden gegeben, indem man die folgenden Nachrichten erstellt:

$expr = And->new (($factor, Any->new ($ADDOP, $factor));
$factor = Or->new ($NUMBER, $parexp);
$parexp = And->new ($LEFTP, $expr, $RIGHTP);

Die Argumente der neuen Methode () sind Hinweise auf LLg oder Scheinnachrichten. (Die schriftliche Ordnung der Richtlinie hat keine Stichhaltigkeit, da Scalars Hinweise sein können, bevor sie einen Wert zugewiesen werden. Diese Hinweise sind entschlossen, wenn jede Nachricht verwendet wird. Während das Beispiel darstellt, können Hinweise erhalten werden auf den Nachrichten, die durch eine Richtlinie. zurückgebracht werden)

Die Semantik wird definiert, indem man eine anonyme Funktion am Ende der Liste der Nachrichtenhinweise setzt. Die anonyme Funktion verwendet die Informationen, die mit den Nachrichten verbunden sind. Diese Informationen werden durch positionsgebundene Parameter gesendet (das Reihe @_). Das nth Argument kennzeichnet das Resultat des nth Parameters der neuen Methode (). Die Informationen, die durch die Funktion zurückgebracht werden, beziehen sich auf die Nachricht und werden mittels der positionsgebundenen Parameter gesendet, wohin die Nachricht verwendet wird. In unserem Beispiel haben wir:

$expr = And->new (($factor, Any->new ($ADDOP, $factor)),
Unterseeboot {
Schiebung (@_);
mein $result = Schiebung (@_);
mein ($op, $integer);
während ($#_ >= 0) {
($op, $integer) = (Schiebung (@_), Schiebung (@_));
wenn ($op eq +) {
$result += $integer;
} sonst {
$result - = $integer;
}
}
$result;
});
$factor = Or->new ($INTEGER, $parexp);
$parexp = And->new ($LEFTP, $expr, $RIGHTP,
Unterseeboot {$_ [2]});

Druck STDERR „Typ Ihr arithmetischer Ausdruck: “;
Druck „Resultat: “, $expr->next, „N“;

Wenn eine ganze Zahl erkannt wird, wird sie durch das anonyme arbeitet verbunden mit der Nachricht $factor zurückgebracht. Diese zurückgebrachten Informationen (oder, genau, synthetisiert, da sie von ein Flughafengebäude kommt und Nichtflughafengebäuden gesendet wird), sind auch in der anonymen Funktion erhältlich, die mit der Nachricht $expr verbunden ist. Die Informationen, die durch die folgende Nachricht zurückgebracht werden, werden verwendet, um den Wert des arithmetischen Ausdrucks zu berechnen.

Das Analysegerät wird oben begonnen, indem man zunächst die Methode () am Axiom der Grammatik anwendet:

$expr->next;

Durch Zahlungseinstellung wird der Input für Analyse vom Standardinput gelesen. Die Beispielsyntaxanalyse analysiert und übersetzt die einzelnen Ausdrücke, die am Flughafengebäude eingetippt werden. Das Beispiel calculator.pl, das mit dem LLg Paket entbunden wird, zeigt, wie man einen Inputregelkreis erstellt, Anzeige und Deutung von willkürlichem erlaubend viele Ausdrücke.
Der Syntaxanalysengenerator kann für andere Zwecke als die Analyse eines Zeichenstromes verwendet werden. Angenommen, die Pakete Lex, LLg und Zeichen, es tadellos möglich ist, um Flughafengebäude zu definieren, die Nachrichten d.h. sind, führt von einer Kategorie anders als Zeichen als Beispiel an. Jedes neue Paket, das Flughafengebäude definiert, soll den Methodenstatus mindestens haben () und zunächst () - sehen vonkoch.pl als Beispiel.

Herunterladen

LLG 1.07 Alpha: Screenshot

Sponsored Links
LLG 1.07 Alpha herunterladen

LLG 1.07 Alpha: Stichwort

LLG 1.07 Alpha: Lesezeichen

Hyperlink code:
Hyperlink and Intro code:

LLG 1.07 Alpha: verwandt software

LLG 1.07 Alpha: Revision
den Namen des Autors :  
Autor E-Mail :  
Kommentar :  
Sicherheits-Code :  
     
   
Meine Software
Sie haben noch keine Software. Klicken Sie auf Save "neben den einzelnen Software, um ihn zu speichern, um Ihre Software-Korb"
Verwandte Suche
Sponsored Links