Я пытаюсь написать парсер OCamllex, который строит строчную карту слов из списка. Тем не менее, я получаю сообщение об ошибке «Неограниченные модуль» при попытке открыть модуль StringMap в заголовке:Использование StringMap в OCamllex
{
open StringMap
type token = EOF | Word of string
}
(* other code *)
Та же ошибка возникает, когда я явно не открывать модуль, и когда я пытаюсь создать карта в трейлере:
module StringMap = Map.Make (String)
Все учебники OCaml предлагают использовать правильный синтаксис; так что, возможно, я злоупотребляю OCamllex (?) Я признаю, что область заголовка, правил и трейлера мне не понятна. Я искал решение в документации, но учебники, ориентированные на OCamllex, скудны. Может ли кто-нибудь сказать, что я делаю неправильно? Поддерживает ли OCamllex модуль StringMap?
Благодарим за отзыв. Мне непонятно, как заголовок, правила и трейлер охвачены. Являются ли привязки, которые я устанавливаю в заголовке, доступном в трейлере? Если бы я планировал использовать StringMap только в трейлере, достаточно ли было бы открыть там модуль? И если считать открытый стиль открытым модулем, как еще мне получить доступ к StringMaps - так как он не входит в стандартную библиотеку. – jdmartin86
Да, привязки, которые вы устанавливаете в заголовке, доступны в трейлере (и в правилах). Если вы используете только что-то в трейлере, вам нужно только привязать его там, но вам нужно связать его перед использованием. Для использования имен внутри модуля, не открывая его, просто прикрепите имя к модулю: 'StringMap.find', а не просто' find'. (Вам все равно нужно * создать * этот модуль с 'модулем StringMap = ...' первым.) – gsg
Ах, вы правы - мне нужно создать сам модуль. Не открывается модуль, который не является частью стандартной библиотеки. Спасибо за ваше терпение; это моя вторая неделя, используя язык! – jdmartin86