Ich versuche, mehr über OCaml Extension Points zu erfahren, und ich habe Probleme bei der Darstellung der Datensatztypen in der AST.OCaml AST Datensatztyp-Darstellung
ich das Beispiel unten aus diesem Blog-Post am Stehlen:
http://whitequark.org/blog/2014/04/16/a-guide-to-extension-points-in-ocaml/
Verwenden der Quelldatei (foo.ml):
let _ = [%getenv "USER"]
und Ausgabe von ocamlc -dparsetree fool.ml :
[
structure_item (test.ml[1,0+0]..[1,0+24])
Pstr_eval
expression (test.ml[1,0+8]..[1,0+24])
Pexp_extension "getenv"
[
structure_item (test.ml[1,0+17]..[1,0+23])
Pstr_eval
expression (test.ml[1,0+17]..[1,0+23])
Pexp_constant Const_string("USER",None)
]
]
Von asttypes.mli und parsetree.mli kann ich die Analyse folgen Baummustervergleich der Linie
Pexp_constant Const_string("USER",None)
Allerdings kann ich nicht mehr folgen, was geschieht, wenn die Parsing-Baum-Datensatztypen darstellt. Es scheint, dass Datensatzfelder nicht in derselben Reihenfolge dargestellt werden, in der sie in der Typdefinition angezeigt werden, und nicht alle Felder in der Syntaxanalysebaumstruktur erforderlich sind (oder angezeigt werden).
Von parsetree.mli:
type expression = {
pexp_desc: expression_desc;
pexp_loc: Location.t;
pexp_attributes: attributes;
}
Der Parsing-Baum Ausgang scheint nur die Position und die Nutzlast zu zeigen, aber ich bin wahrscheinlich dies falsch zu lesen.
Wie kann ich den AST für Datensatztypen korrekt lesen? Für den Typ Ausdruck sollte es sein:
Ich bin mir nicht sicher, ob ich Ihre Frage verstehe. pexp_desc ist die eigentliche Beschreibung des AST (es ist eine große Summenart). -dsourcetree ist nur eine schematische Darstellung, nicht der tatsächliche OCaml-Wert des AST. – Drup