0

keyword_tableいくつかの文字列をいくつかのトークンにマップする を定義したいと思います。また、このテーブルを と の両方parser.mlyで表示できるようにしたいと考えていますlexer.mll

でテーブルを定義する必要があるようですparser.mly

%{ 
  open Utility (* where hash_table is defined to make a table from a list *)
  let keyword_table = hash_table [
      "Call", CALL; "Case", CASE; "Close", CLOSE; "Const", CONST; 
      "Declare", DECLARE; "DefBool", DEFBOOL; "DefByte", DEFBYTE ]
%}

lexer.mllただし、たとえば、では使用できませんでした

{
open Parser
let x = keyword_table (* doesn't work *)
let x = Parser.keyword_table (* doesn't work *)
let x = Parsing.keyword_table (* doesn't work *)
}

誰が問題がどこにあるのか教えてもらえますか? parser.mlyと の両方でデータを可視化することはできませんlexer.mllか?

4

2 に答える 2

0

gsg の回答で述べたように、パーサーの実装と共にインターフェイスをocamlyacc生成し、トークンの種類とエントリ ポイントのみをエクスポートします。http://caml.inria.fr/mantis/view.php?id=1703によると、これは変更される可能性が低いため、基本的に 2 つの解決策があります。mliml

  • 後で生成されたものを変更しますmli(私は通常、Makefile単純なルールを持ってrmいますが、代わりに必要な署名を追加することもできます)。
  • menhir上記のバグレポートで提案されているように使用してください。
于 2014-02-03T14:03:25.363 に答える