Ich habe einen Typ expr in einer expr.ml Datei. In parser.mly (OCamlyacc-Datei) definiere ich die expr-Regel und gebe den Typ:
%Vor%Allerdings bekomme ich:
%Vor%Ich habe versucht,
hinzuzufügen %Vor%am Anfang der .mly-Datei, aber es funktioniert immer noch nicht. Wie kann ich diesen Ausdruckstyp in einer externen Datei definieren und als Rückgabewert meiner Regel verwenden? Danke.
Ich bin mir nicht sicher, ob ich das richtig verstehe.
Aber Sie kämpfen mit einer zirkulären Abhängigkeit? Nehmen wir an, T
enthält Ihren Typ und ruft den Parser P
auf. P
kann den Typ T.t
nicht erzeugen, da T
von P
abhängt, nicht umgekehrt. Normalerweise habe ich eine dritte Datei erstellt, die die Typinformation T'
enthält.
Zum Beispiel
T.ml
%Vor%P.mly
%Vor%T'.ml
%Vor% In Ocamlyacc können Sie keinen Text angeben, der in der Datei interface ( .mli
) generiert werden soll. Wo immer Sie einen Typ angeben, der in die Schnittstelle eingeht (der Typ eines Tokens oder einer Regel), müssen Sie einen vollständig qualifizierten Typ verwenden.
Hier sieht es so aus, als könnten Sie einen vollständig qualifizierten Typ verwenden, aber manchmal ist das nicht möglich, weil der Typ eine Funktor-Anwendung enthält. Es gibt mehrere Problemumgehungen:
.mli
-Datei durch, um eine Kopfzeile hinzuzufügen. Du kannst so ziemlich alles machen, aber es ist hässlich und nervig. Tags und Links ocaml ocamlyacc parser-generator