2010年1月28日

GNU gperf is a perfect hash function generator

GNU gperf
// lang-utf8.gperf
struct language {
const char *foreign_name;
const char *english_name;
const char *locale;
};
%%
አማርኛ, "Amharic", NULL
česky, "Czech", "cs_CZ.UTF-8"
Dansk, "Danish", "da_DK.UTF-8"
English, "English", "en_GB.UTF-8"
Suomi, "Finnish", "fi_FI.UTF-8"
Français, "French", "fr_FR.UTF-8"
Deutsch, "German", "de_DE.UTF-8"
Ελληνικά, "Greek", "el_GR.UTF-8"
עברית, "Hebrew", "he_IL.UTF-8"
Italiano, "Italian", "it_IT.UTF-8"
Norsk, "Norwegian", "no_NO.UTF-8"
Русский, "Russian", "ru_RU.UTF-8"
Español, "Spanish", "es_ES.UTF-8"
Svenska, "Swedish", "sv_SE.UTF-8"
ภาษาไทย, "Thai", "th_TH.UTF-8"
Türkçe, "Turkish", "tr_TR.UTF-8"
Tiếng Việt, "Vietnamese", "vi_VN.UTF-8"
日本語, "Japanese", "ja_JP.UTF-8"
繁體中文, "Chinese", "zh_TW.UTF-8"
한글, "Korean", "ko_KR.UTF-8"
%%

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[]) {
if (argc < 2) {
return EXIT_FAILURE;
}
char* str = argv[1];
struct language * l = in_word_set(str, strlen(str));
if (l != NULL) {
printf("foreign_name: %s, english_name: %s, locale: %s\n",
l->foreign_name, l->english_name, l->locale);
} else {
printf("NULL\n");
}
return EXIT_SUCCESS;
}
/*
$ gperf -k1 -t -I -K foreign_name < lang-utf8.gperf > lang-utf8.c
$ gcc -o lang-utf8 lang-utf8.c
$ ./lang-utf8 繁體中文
foreign_name: 繁體中文, english_name: Chinese, locale: zh_TW.UTF-8
*/

沒有留言:

網誌存檔