OCaml Uzantı Noktaları hakkında daha fazla bilgi almaya çalışıyorum ve AST'deki kayıt türlerinin temsilini takiben sorun yaşıyorum. ocamlc -dparsetree fool.ml aitOCaml AST kayıt tipi gösterimi
let _ = [%getenv "USER"]
Ve çıktı: Kaynak dosyayı (foo.ml) kullanarak
http://whitequark.org/blog/2014/04/16/a-guide-to-extension-points-in-ocaml/
: Ben bu blog yayınında aşağıdaki örneğe çalıyorum
:
[
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)
]
]
Asttypes.mli ve parsetree.mli'den ayrıştırma işlemini takip edebilirim
Pexp_constant Const_string("USER",None)
Ancak hattın ağaç desen eşleştirme, artık ayrıştırma ağacı kayıt türlerini temsil durumlarda neler olduğunu takip edebilirsiniz. Kayıt alanlarının, tür tanımında göründükleri sırayla değil aynı zamanda, ayrıştırıcı ağacında tüm alanların (veya gösterilmesinin) gerekli olmadığı gösterilmektedir. parsetree.mli itibaren
:
type expression = {
pexp_desc: expression_desc;
pexp_loc: Location.t;
pexp_attributes: attributes;
}
ayrıştırma ağacı çıkışı sadece konumu ve yükünü göstermek gibi görünüyor, ama muhtemelen yanlış bu okuyorum.
Kayıt türleri için AST'yi nasıl doğru okurum? Tip ifadesi için:
(* record type declaration and pexp_loc field *)
expression (test.ml[1,0+8]..[1,0+24])
(* pexp_desc field *)
Pexp_extension "getenv"
[
...
]
Sorunuzu anladığımdan emin değilim. pexp_desc, AST'nin gerçek açıklamasıdır (büyük bir toplam tipi). -sourcetree sadece bir şematik temsil, AST gerçek OCaml değeri değil. – Drup