SSブログ

Camlp4 3.10 のさわり (2) [OCaml]

* ロードされている Camlp4 モジュールを調べる。

Camlp4.Register.loaded_modules を見る。これは参照型でモジュールがロードされるときに改変されるようだ。

KURO-BOX% ocaml
        Objective Caml version 3.10.0

# #load "camlp4o.cma";;
        Camlp4 Parsing version 3.10.0

# !Camlp4.Register.loaded_modules;;
- : string list =
["Camlp4OCamlParserParser"; "Camlp4OCamlRevisedParserParser";
 "Camlp4OCamlParser"; "Camlp4RevisedParserParser"]
# #load "camlp4oof.cma";;
        Camlp4 Parsing version 3.10.0

# !Camlp4.Register.loaded_modules;;
- : string list =
["Camlp4ListComprenhsion"; "Camlp4MacroParser"; "Camlp4MacroParser";
 "Camlp4GrammarParser"; "Camlp4OCamlParserParser";
 "Camlp4OCamlRevisedParserParser"; "Camlp4OCamlParser";
 "Camlp4RevisedParserParser"]

* エントリの内容を表示する

Camlp4 3.9 では Grammar.Entry.print 関数を使って「Grammar.Entry.print Pcaml.str_item;;」とかやっていたけど Camlp4 3.10 では ocaml トップレベルのプリティプリンタになっているのでプリティプリンタをインストールして値を打つだけでよい。

# #load "camlp4o.cma";;
        Camlp4 Parsing version 3.10.0

# #install_printer Camlp4.PreCast.Gram.Entry.print;;
# Camlp4.PreCast.Syntax.str_item;;
- : Camlp4.PreCast.Syntax.Ast.str_item Camlp4.PreCast.Syntax.Gram.Entry.t =
str_item: [ "top" LEFTA
  [ "let"; "module"; a_UIDENT; module_binding0; "in"; expr
  | "let"; opt_rec; binding; "in"; expr
  | "let"; opt_rec; binding
  | "exception"; constructor_declaration; "="; type_longident
  | "exception"; constructor_declaration
  | "external"; a_LIDENT; ":"; ctyp; "="; string_list
  | "include"; module_expr
  | "module"; "rec"; module_binding
  | "module"; "type"; a_UIDENT; "="; module_type
  | "module"; a_UIDENT; module_binding0
  | "open"; module_longident
  | "type"; type_declaration
  | "class"; "type"; class_type_declaration
  | "class"; class_declaration
  | ANTIQUOT (("" | "stri" | "anti" | "list"), _)
  | QUOTATION _
  | expr ] ]

* エントリ指定でのパーシング

KURO-BOX% ocaml
        Objective Caml version 3.10.0

# #load "camlp4o.cma";;
        Camlp4 Parsing version 3.10.0

# Camlp4.PreCast.Syntax.Gram.parse_string Camlp4.PreCast.Syntax.str_item Camlp4.PreCast.Loc.ghost "let _ = 1";;
- : Camlp4.PreCast.Syntax.Ast.str_item =
Camlp4.PreCast.Syntax.Ast.StExp (<abstr>,
 Camlp4.PreCast.Syntax.Ast.ExInt (<abstr>, "1"))

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

Camlp4 3.10 のさわりScala で 20.minutes.a.. ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。