Я пытаюсь использовать типы, которые у меня есть в другом файле (tokenTypes.ml):
type token =
| OpenBrace
| CloseBrace
| OpenParen
| CloseParen
| Semicolon
| IntKeyword
| ReturnKeyword
| Negation
| BitwiseComp
| LogicNegation
| Int of int
| Id of string
И я пытаюсь использовать его в другом файле (лексере), первый случай сработалотлично:
let token_to_string t =
match t with
| OpenBrace -> "{ "
| CloseBrace -> "} "
| OpenParen -> "( "
| CloseParen -> ") "
| Semicolon -> "; "
| IntKeyword -> "INT "
| ReturnKeyword -> "RETURN "
| Negation -> "-"
| BitwiseComp -> "~"
| LogicNegation -> "!"
| Int i -> Printf.sprintf "INT<%d> " i
| Id id -> Printf.sprintf "ID<%s> " id
Я могу использовать каждый определенный тип токена, но затем, когда я пытаюсь создать новый экземпляр токена типа, компилятор говорит:
КонструкторОтрицание не относится к типу TokenTypes.token
, поэтому мне нужно создать модуль с помощью ocamlopt -c tokenTypes.ml, а затем использовать его в коде с открытым кодом, например:
lex_rest char_list =
let open TokenTypes in
match char_list with
| [] -> []
| '{'::rest -> OpenBrace::(lex_rest rest)
| '}'::rest -> CloseBrace::(lex_rest rest)
| '('::rest -> OpenParen::(lex_rest rest)
| ')'::rest -> CloseParen::(lex_rest rest)
| ';'::rest -> Semicolon::(lex_rest rest)
| '-'::rest -> Negation::(lex_rest rest)
| '~'::rest -> BitwiseComp::(lex_rest rest)
| '!'::rest -> LogicNegation::(lex_rest rest)
есть ли способ не использовать модуль?Я хочу выйти из открытой части и использовать только исходный код, а не модуль.
Help pls: c