программа Valspeak
Забавное использование Lex: Valspeak. Много лет назад была написана пара программ, преобразующих нормальный английский текст к так называемому джайву (jive) или провинциальному сленгу. Эти программы были написаны с помощью Lex. Можно использовать Lex для преобразования текста из известного входного формата в другой выходной формат. Ниже приведена программа лексического преобразования к провинциальному сленгу.
Исходный код Lex для Valspeak
Т [" .!?,"]* % "bad" printf("mean"); "big" printf("bitchin'est"); "body" printf("bod"); "bore" printf("drag"); "car" printf("rod"); "dirty" printf("grodie"); "filthy" printf("grodie to thuh max"); "food" printf("munchies"); "girl" printf("chick"); "good" printf("bitchin"); "great" printf("awesum"); "gross" printf("grodie"); "guy" printf("dude"); "her" printf("that chick"); "him" printf("that dude"); "house" print ("pad"); "interesting" printf ("cool"); "large" printf("awesum"); "leave" printf("blow"); "man" printf("nerd "); "meeting" printf("party"); "movie" printf("flick"); "music" printf("tunes"); "neat" printf("keen"); "nice" printf("class"); "no way" printf("just no way"); "people" printf("guys"); "really" printf("totally"); "strange" printf("freaky"); "the" printf("thuh"); "very" printf("super"); "want" printf("want"); "weird" printf("far ouf"); "yes" printf("fer shure"); "But" printf("Man,"); "He" printf("That dude"); "I like" printf("I can dig"); "No," printf("Like, no way,"); "Sir" printf("Man"); "She" printf("That fox"); "This" printf("Like, ya know, this"); "There" printf("Like, there"); "We" printf("Us guys"); "Yes," printf("Like,");
"can be" "can't be" "should have been" "shouldn't have been" "should be" "shouldn't be" "was" "wasn't" "will be" "won't be"
ing printf ("in");
"is" { ECHO; switch (rand () % 4) { case 0: printf ("like, ya know,"); break; case 1: printf(""); break; case 2: printf ("like wow!"); break; case 3: printf ("ya know, like,"); break; } }
"maybe" { switch( rand () % 5) { case 0: printf("if yon're a Pisces"); break; case 1: printf ("if the moon is full"); break; case 2: printf ("if the vibes are right"); break; case 3: printf("when you get the feeling"); break; case 5: printf("maybe"); break; } }
"," { switch (rand () % 6) { case 0: printf(", like,"); break; case 1: printf(", fer shure,"); break; case 2: printf(", like, wow,"); break; case 3: printf(", oh, baby,"); break; case 4: printf(", man,"); break; case 5: printf(", mostly, "); break; } }
"!" { switch (rand () % 3) { case 0: printf("! Gag me with a SPOOOOON!"); break; case 1: printf("! Gag me with a pitchfork!"); break; case 2: printf("! Oh, wow!"); } }
. ECHO; \n ECHO;
%
main () { srand(getpid()); yylex(); }
Исходный код легко читается и понимается - при обнаружении некоторых слов или знаков пунктуации происходит простая замена. Например, слово house заменяется на pad. Если я ввожу:
This is my house boat, sir!
To получаю в ответ:
Like, ya know, this is my pad boat, like, sir! Gag me with a SPOOOOON!
Эта программа Lex использует генератор случайных чисел, поэтому при последовательных вводах одной и той же строки скорее всего будут получены различные результаты. Вводя во второй раз ту же строку, получим в результате:
Like, ya know, this is like wow! My pad boat, fer shure,sir! Gag my with a pitch work!
Шутки ради я обработал преамбулу Конституции с помощью Valspeak, чтобы посмотреть, какой вид имел бы главный закон страны, будь Джеймс Мэдисон родом из какой-то долины Сими:
We, like, the guys of thuh United States, fer shure, in order to form a more perfect Union, like, wow, establish justice, fer shure, insure domestic tranquility, like, wow, provide for the common defense, fer shure, promote thuh general welfare, man, and secure the blessin's of liberty to ourselves and our posterity do ordain and establish this Constitution for thuh united States of America.
Я думаю, что подобный документ оскорбил бы вековые традиции юриспруденции.
[ ] [ ] [ ]