В большинстве языков этого нет, поэтому я был бы очень удивлен, обнаружив его в OCaml. Apache делает это с файлом mime.types
- вы можете найти там подсказки. Это самый обычный способ - огромная таблица, которая отображает расширения в миметипы. Вы можете легко реализовать это в OCaml:
let mimetype_of_extension = function
| "txt" | "log" -> "text/plain"
| "html" | "htm" -> "text/html"
| "zip" | "application/zip"
...
Другой способ - просмотреть содержимое файла, но тогда вам в основном нужно знать о различных форматах файлов.
Тем не менее, это не очень вам помогает, поскольку исходные файлы всех языков обычно обрабатываются как text/plain
. Они не различимы по типу миме; и поэтому я действительно понятия не имею, что делает ваша get_language_from_mime_type
функция.
Однако имя файла расширения различных исходных файлов более или менее стандартизировано, поэтому, если вы знаете расширение, вы будете знать язык. Получить расширение так же просто, как скопировать все, что следует за последним периодом из имени файла.
let extension_of_filename filename =
let pos = (String.rindex filename '.') + 1 in
let len = String.length filename in
let ext = String.create (len - pos) in
String.blit filename pos ext 0 (len - pos);
ext;;
Ну, ладно, просто на любом языке, кроме Brainfuck и OCaml, по крайней мере. После этого все просто - «c» - это программа на C, как и «h»; «ml» означает OCaml; и т.д.