Я хотел бы определить keyword_table
, который отображает некоторые строки на некоторые маркеры, и я хотел бы сделать эту таблицу видимой как для, так и для lexer.mll
.Сделать таблицу, содержащую маркеры, видимые как для .mly, так и для .mll по menhir
кажется, что таблица должна быть определена в 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 *)
}
Как this comment наводит на мысль, menhir
имеет решение для этого мог ли кто-нибудь рассказать мне какие-либо подробности?
Проблема в том, что 'keyword_table' содержит токены, я не могу поместить его в третий файл' keyword.ml' ... – SoftTimur
Это не проблема, см. Документ для '--external-tokens' – Thomash
Я использовал [http://www.ii.uni.wroc.pl/~lukstafi/pmwiki/uploads/Functional/functional-lecture09.pdf) '-external-tokens' из-за некоторых проблем, которые у меня были с 'ocamlbuild'. В любом случае, это дает большую гибкость. – lukstafi