Moin,
folgende Problemstellung kurz erläutert:
Ich schreibe momentan einen Parser und möchte in einer Klasse ein bestimmtes Regelset definieren, welches sich aus der BNF (Backus Nauer Form) zusammensetzt.
Einfacher gesagt: Die BNF Grammatik die ich schon erstellt habe (in BNF schreibweise) möchte ich jetzt in PHP Code umwandeln, um so die Grammatikregeln in einer Klasse festzuhalten.
Später wird der Parser einen bestimmten Ausdruck (in Form eines Strings) gegen diese Regeln prüfen.
Mein Problem besteht jetzt darin, die BNF Notation in PHP Code zu bekommen, hier ein Beispiel einer BNF Notation:
Das liest sich wie folgt:
Ein "Ausdruck" besteht aus einem einzelnen Zeichen ODER einem einzelnen Zeichen gefolgt von einer Zeichenfolge ODER einem definierten Feld (was in den eckigen Klammern steht sind immer Alternativen die vorkommen "können", nicht müssen".
Wer sich bisschen mit Grammatiken und der BNF beschäftigt hat der wirds verstehen, was hier definiert wird. Es gibt auch den bekannten Bison Parser Generator, der aus solchen BNF Grammatiken (natürlich dann in eigener Bison Syntax definiert) einen Parser für die vorgegebene Grammatik erstellt.
Kurzum, ich baue einen eigenen Parser in sehr simpler Form.
Wie bekomme ich nun die formalen Grammatikregeln in PHP Code? Ich hänge grad an dem Problem, wie ich z.B. den "Ausdruck" definiere.
Mir schwebt sowas hier vor:
Auf den einzelnen Teilen des Ausdrucks bauen dann, wie in der BNF Notation, die weiteren Definitionen auf.
Also, nochmals: Wie bekomme ich eine solche Regel in PHP notiert, so dass ich mit meinem Parser einen Ausdruck gegen diese Regel prüfen kann?
Ich hoffe es ist verständlich, was ich mit all dem meine!
Gruss
ne0h
folgende Problemstellung kurz erläutert:
Ich schreibe momentan einen Parser und möchte in einer Klasse ein bestimmtes Regelset definieren, welches sich aus der BNF (Backus Nauer Form) zusammensetzt.
Einfacher gesagt: Die BNF Grammatik die ich schon erstellt habe (in BNF schreibweise) möchte ich jetzt in PHP Code umwandeln, um so die Grammatikregeln in einer Klasse festzuhalten.
Später wird der Parser einen bestimmten Ausdruck (in Form eines Strings) gegen diese Regeln prüfen.
Mein Problem besteht jetzt darin, die BNF Notation in PHP Code zu bekommen, hier ein Beispiel einer BNF Notation:
Code:
<ausdruck> ::= <zeichen> | <zeichen> <zeichenfolge> | [<zeichen>] [<zeichenfolge>] <irgendein_feld> <irgendein_feld> ::= <zeichen> | <zeichen> <zeichenfolge> <zeichen> ::= a | b | c | d | e | f | g | h | i | j | k | [.......] <zeichenfolge> ::= <zeichen> | <zeichen> <zeichenfolge>
Ein "Ausdruck" besteht aus einem einzelnen Zeichen ODER einem einzelnen Zeichen gefolgt von einer Zeichenfolge ODER einem definierten Feld (was in den eckigen Klammern steht sind immer Alternativen die vorkommen "können", nicht müssen".
Wer sich bisschen mit Grammatiken und der BNF beschäftigt hat der wirds verstehen, was hier definiert wird. Es gibt auch den bekannten Bison Parser Generator, der aus solchen BNF Grammatiken (natürlich dann in eigener Bison Syntax definiert) einen Parser für die vorgegebene Grammatik erstellt.
Kurzum, ich baue einen eigenen Parser in sehr simpler Form.
Wie bekomme ich nun die formalen Grammatikregeln in PHP Code? Ich hänge grad an dem Problem, wie ich z.B. den "Ausdruck" definiere.
Mir schwebt sowas hier vor:
PHP-Code:
public static $ausdruck = self::$zeichen || (self::$zeichen && self::$zeichenfolge) || self::$irgendein_feld
Also, nochmals: Wie bekomme ich eine solche Regel in PHP notiert, so dass ich mit meinem Parser einen Ausdruck gegen diese Regel prüfen kann?
Ich hoffe es ist verständlich, was ich mit all dem meine!
Gruss
ne0h
Kommentar