pypeg2 - Kann dieser Ausdruck mit der Peg-Grammatik analysiert werden?

8

Ich muss Ausdrücke basierend auf folgenden Regeln analysieren:

  1. Ein Ausdruck kann ein Filterobjekt enthalten, das als name:value dargestellt wird.
  2. Ein Ausdruck kann einen Zeichenfolgenausdruck enthalten
  3. Ein Ausdruck kann boolesche ODER, AND
  4. enthalten
  5. Alles Innere kann zitiert werden

So sieht ein typischer Ausdruck wie

aus

filter1:45 hello world filter:5454

filter1:45 'hello world' filter:5454

hello world

'hello world' OR filter:43

Folgendes habe ich bisher versucht:

%Vor%

Mit dieser Grammatik kann ich Strings wie

analysieren

filter2:32 filter1:3243

Nach dem, was ich verstanden habe, kann ich csl function mit einer Liste von Objekten versehen, und die Grammatik muss in dieser Reihenfolge sein. Was aber, wenn ich ein Objekt wie

parsen möchte

filter34:43 hello filter32:3232

ODER

filter34:43 OR filter32:3232

Wie kann ich sagen, dass es in einem Ausdruck mehrere Arten von Objekten gibt (Filter, Ausdrücke, boolesche Werte)? Ist das mit Pflock möglich?

    
Jan Vorcak 26.11.2015, 10:25
quelle

1 Antwort

5

Von deiner Spezifikation in der Frage und den Kommentaren denke ich, dass dein Code nahe ist - aber du willst nicht das csl . Ich habe den Code, von dem ich denke, dass er unten steht (es ist vielleicht nicht die eleganteste Implementierung, aber ich denke, es ist vernünftig). Sie müssen ein mögliches Problem vermeiden, dass BooleanLiteral eine Untermenge von StringLiteral ist. Dies bedeutet, dass Sie% code% nicht haben können

%Vor%

Das Ergebnis ist eine Liste von Objekten mit den richtigen Typen entsprechend Ihrer Spezifikation, denke ich. Ich denke, das Entscheidende ist, dass Sie Alternativen als Python LineExpression hinzufügen können (d. H.% Co_de% bedeutet list oder [LineFilter,StringLiteral] ). Der PEG-Parser versucht sie in der Reihenfolge, in der sie auftreten, d. H. Er versucht, die erste Übereinstimmung zu finden, und nur wenn es fehlschlägt, versucht er die zweite und so weiter.

%Vor%

Ausgabe

%Vor%     
J Richard Snape 07.12.2015, 12:41
quelle

Tags und Links