Gibt es eine Möglichkeit, parsec-Berichte zu "shift-reduce" -Konflikten zu machen?

8

Ich spiele mit Parsec herum und merke, dass ich eine mehrdeutige Grammatik habe. Offensichtlich ist das ein Fehler meinerseits, aber ich bin irgendwie gewohnt, Yacc-Stil-Parser-Generatoren mich wissen zu lassen, dass ich dumm bin. Parsec isst nur Zeichen in der Reihenfolge, in der Sie ihm Parser geben (ja, ich weiß über try ).

Gibt es eine Möglichkeit, Parsec dazu zu bringen, mir zu sagen, wenn meine Grammatik nicht links ist? Programme, die für mich arbeiten, sind großartig.

Danke!

(Ich weiß, dass shift-reduce mit einer anderen Art von Parser-Technologie zu tun hat. Ich meine einfach, mehrdeutige Grammatiken zu beschreiben.)

    
Hans 29.08.2012, 04:13
quelle

1 Antwort

8

Ich bin kein Parsec-Experte, also werde ich wahrscheinlich korrigiert, aber ich glaube nicht, dass dies möglich ist, aus dem einfachen Grund, dass Parsec nichts über deine Grammatik weiß.

Oder anders ausgedrückt, Ihre Grammatik ist vielleicht mehrdeutig, Ihr Parsec-Parser ist es nicht, und ein Programm hat keine Möglichkeit zu bestimmen, dass eine andere Anordnung von Parsec-Kombinatoren, die eine andere Ausgabe für äquivalente Eingaben erzeugt, ebenfalls gültig ist Darstellung einer nicht spezifizierten Grammatik.

Da Sie eine Grammatik haben, möchten Sie vielleicht glücklich und alex , was dir eine viel mehr lexx / yacc-ähnliche Erfahrung geben wird.

Ein interessantes Projekt könnte sein, die BNFC anzupassen, um einen AST von Parsec-Kombinatoren zu erzeugen, um eine Grammatik darzustellen, aber ich vermute, dies wäre eine nicht-triviale Aufgabe.

    
John L 29.08.2012, 07:10
quelle

Tags und Links