Bison: Optionale Tokens in einer einzelnen Regel

9

Ich benutze GNU Bison 2.4.2, um eine Grammatik für eine neue Sprache zu schreiben, an der ich arbeite, und ich habe eine Frage. Wenn ich eine Regel festlege, sagen wir:

%Vor%

Wenn ich eine Variation der Regel habe, zum Beispiel

%Vor%

Wo (aus Flex-Scanner-Regeln):

%Vor%

(und T_IDENT_LIST ist eine Regel für durch Kommas getrennte Bezeichner).

Gibt es eine Möglichkeit, all dies nur in einer Regel zu spezifizieren, indem man irgendwie "T_EXTENDS T_IDENT_LIST" als optional einstellt? Ich habe es schon mit

probiert %Vor%

Aber Bison gab mir einen Fehler.

Danke

    
Simone Margaritelli 19.04.2010, 17:31
quelle

3 Antworten

9

Um eine lange Geschichte kurz zu machen, nein. Bison behandelt nur LALR (1) Grammatiken, was bedeutet, dass es nur ein Symbol von Lookahead verwendet. Was Sie brauchen, ist etwa so:

%Vor%

Es gibt andere Parsergeneratoren, die jedoch mit allgemeineren Grammatiken arbeiten. Wenn Speicher dient, unterstützen einige von ihnen optionale Elemente relativ direkt, wie Sie es wünschen.

    
Jerry Coffin 19.04.2010, 17:40
quelle
1

Warum teilen Sie sie nicht einfach mit dem Operator choice ( | )?

%Vor%

Ich glaube nicht, dass Sie es tun können, nur weil dies ein LALR (1) Bottom-Up-Parser ist, Sie würden etwas anderes brauchen, wie LL (k) (ANTLR?), um das zu tun, was Sie tun wollen.

    
Jack 19.04.2010 17:43
quelle
0

Ich denke, Sie können höchstens

%Vor%     
Michael Krelin - hacker 19.04.2010 17:41
quelle

Tags und Links