Я обнаружил, что Asttypes и Parsetree оба определены константой типа:
Parsetree:
type constant =
| Pconst_integer of string * char option
| Pconst_char of char
| Pconst_string of string * string option
| Pconst_float of string * char option
Asttypes:
type constant =
| Const_int of int
| Const_char of char
| Const_string of string * string option
| Const_float of string
| Const_int32 of int32
| Const_int64 of int64
| Const_nativeint of nativeint
и Parsetree откроет модуль Asttypes в ocaml/ parsing / parsetree.mli:
open Asttypes
так будет ли константа, определенная в Parsetree, переопределять константу, определенную в Asttypes?
У меня есть эта тестовая программа:
let ()=
let filename = "/home/wk/prog/LocationTest/c.ml" in
Location.input_name := filename ;
let readhandle = open_in filename in
let buf = Lexing.from_channel readhandle in
Location.init buf filename ;
let ast = Parse.implementation buf in
Printf.printf "%d" buf.lex_buffer_len;
let a=(List.nth ast 0).pstr_desc in
match a with
|Pstr_eval (x,y)->
match x.pexp_desc with
|Pexp_constant z->
match z with
|Pconst_integer (x,y)->
Printf.printf "%d" x;
c.ml имеет только одну строку, определенное число
эта программа не может работать, компилятор говорит мне, что ей нужен тип Asttypes.constant
, если я изменю две последние строки на:
|Const_int q->
Printf.printf "%d" q;
Работает нормально, и отображается число в c.ml