So-net無料ブログ作成
検索選択

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

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

×

この広告は1年以上新しい記事の更新がないブログに表示されております。