Previous: Example-Pascal Lexical Scanner, Up: More Examples [Contents][Index]
¤³¤³¤Ç¤Ï¡¢ ¥¹¥¿¡¼¥È¾õÂÖ¤ò»È¤Ã¤Æ¡¢ Flex¤Ë¤è¤êÀ¸À®¤µ¤ì¤ë¥¹¥¥ã¥Ê¤ÎÆâÉô¤Ë¾®µ¬ÌϤΥѡ¼¥µ¤òºî¤ëÊýË¡¤ÎÎã¤ò¼¨¤·¤Þ¤¹¡£ ¤³¤Î¥³¡¼¥É¤ÏThe New Hackers Dictionary ¡Êprep.ai.mit.edu¡¢ ¤ª¤è¤Ó¤½¤Î¾¤Î¿¤¯¤Î¥¤¥ó¥¿¡¼¥Í¥Ã¥ÈFTP¥µ¥¤¥È¤«¤éÆþ¼ê²Äǽ¤Ê¥Æ¥¥¹¥È·Á¼°¤Î¤â¤Î¡Ë ¤òÆþÎϤȤ·¤Æ¼õ¤±¼è¤ê¡¢ ¤¹¤°¤ËÀ½ÈǤª¤è¤Ó°õºþ¤Ç¤¤ë¾õÂÖ¤ÎTexinfo¥Õ¥©¡¼¥Þ¥Ã¥È¤Î¥É¥¥å¥á¥ó¥È¤ËÊÑ´¹¤¹¤ë¤â¤Î¤Ç¤¹¡£ ¤³¤Î¥³¡¼¥É¤Ïjargon2910.ascii¤ò»È¤Ã¤Æ¥Æ¥¹¥ÈºÑ¤ß¤Ç¤¹¡£
ŵ·¿Åª¤Ê»È¤¤Êý¤Ï°Ê²¼¤Î¤È¤ª¤ê¤Ç¤¹¡£
j2t < jargon > jargon.texi tex jargon.texi lpr -d jargon.dvi
¤³¤Î¥×¥í¥°¥é¥à¤Ï¡¢
»ÈÍѤËÂѤ¨¤ëinfo
¥Õ¥¡¥¤¥ë¤ËÊÑ´¹²Äǽ¤Ê¥Õ¥¡¥¤¥ë¤ÏºîÀ®¤·¤Þ¤»¤ó¤¬¡¢
¤³¤¦¤·¤¿µ¡Ç½¤ÏÂ礷¤¿º¤Æñ¤â¤Ê¤¯Äɲ乤뤳¤È¤¬²Äǽ¤Ç¤¹¡£
¤³¤ÎÎã¤ÏÈó¾ï¤ËŤ¤¤â¤Î¤Ç¤¹¤¬¡¢
Â礷¤ÆÊ£»¨¤Ç¤â¤Ê¤¤¤Î¤Ç¡¢
¿¬¹þ¤ß¤·¤Ê¤¤¤Ç¸¦µæ¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£
/* * j2t.lex : ¥¹¥¿¡¼¥È¾õÂÖ¤òÍøÍѡʤҤç¤Ã¤È¤·¤Æ°ÍÑ¡ª¡Ë¤¹¤ëÎã */ %{ #define MAX_STATES 1024 #define TRUE 1 #define FALSE 0
#define CHAPTER "@chapter" #define SECTION "@section" #define SSECTION "@subsection" #define SSSECTION "@subsubsection"
int states[MAX_STATES]; int statep = 0; int need_closing = FALSE; char buffer[YY_BUF_SIZE]; extern char *yytext;
/* * ¤³¤Î¥×¥í¥°¥é¥à¤¬À¸À®¤¹¤ë*.texinfo¥Õ¥¡¥¤¥ë¤ÎÀèÆ¬Éôʬ¤òºî¤ë¡£ * ¤³¤ì¤Ïɸ½àŪ¤ÊTexinfo¥Ø¥Ã¥À¤Ç¤¢¤ë */ void print_header(void) { printf("\\input texinfo @c -*-texinfo-*-\n"); printf("@c %c**start of header\n",'%');
printf("@setfilename jargon.info\n"); printf("@settitle The New Hackers Dictionary\n"); printf("@synindex fn cp\n"); printf("@synindex vr cp\n"); printf("@c %c**end of header\n",'%'); printf("@setchapternewpage odd\n");
printf("@finalout\n"); printf("@c @smallbook\n"); printf("\n"); printf("@c ====================================================\n\n"); printf("@c This file was produced by j2t. Any mistakes are *not*\n"); printf("@c the fault of the jargon file editors.\n"); printf("@c ====================================================\n\n"); printf("@titlepage\n"); printf("@title The New Hackers Dictionary\n"); printf("@subtitle Version 2.9.10\n");
printf("@subtitle Generated by j2t\n"); printf("@author Eric S. Raymond, Guy L. Steel, and Mark Crispin\n"); printf("@end titlepage\n"); printf("@page\n"); printf("@c ====================================================\n"); printf("\n\n");
printf("@unnumbered Preface\n"); printf("@c *******\n"); }
/* * À¸À®¤µ¤ì¤ëTexinfo¥Õ¥¡¥¤¥ë¤ÎËöÈø¤ÎÉôʬ¤òºîÀ®¤¹¤ë */ void print_trailer(void) { printf("\n"); printf("@c ====================================================\n"); printf("@contents\n"); /* Ìܼ¡¤òɽ¼¨¤¹¤ë */ printf("@bye\n\n"); }
/* * ¸å¤Ç¤½¤ì¤ò¸«¤Ä¤±¤ë¤³¤È¤¬¤Ç¤¤ë¤è¤¦¡¢Àá¤Þ¤¿¤Ï¾Ï¤Ë²¼Àþ¤ò°ú¤¯ */ void write_underline(int len, int space, char ch) { int loop; printf("@c ");
for(loop=3; loop<space; loop++){ printf(" "); } while(len--){ printf("%c",ch); } printf("\n\n"); }
/* * Texinfo¤Ë¤ª¤¤¤ÆÆÃ¼ì¤Ê°ÕÌ£¤ò»ý¤Äʸ»ú¤ò¥Á¥§¥Ã¥¯¤·¡¢¥¨¥¹¥±¡¼¥×¤¹¤ë */ char *check_and_convert(char *string) { int buffpos = 0; int len,loop;
len = strlen(string); for(loop=0; loop<len; loop++){ if(string[loop] == '@' || string[loop] == '{' || string[loop] == '}') { buffer[buffpos++] = '@'; buffer[buffpos++] = string[loop]; } else { buffer[buffpos++] = string[loop]; } } buffer[buffpos] = '\0'; return(buffer); }
/* * ¾Ï¡¢Àá¡¢¹à¤Î¥Ø¥Ã¥À¤ò½ñ¤½Ð¤¹ */ void write_block_header(char *type) { int loop; int len;
(void)check_and_convert(yytext); len = strlen(buffer); for(loop=0; buffer[loop] != '\n';loop++)
buffer[loop] = '\0'; printf("%s %s\n",type,buffer); write_underline(strlen(buffer),strlen(type)+1,'*'); } %}
/* * Flex¤Îµ½Ò¾ðÊ󤬤³¤³¤«¤é»Ï¤Þ¤ë */ %x HEADING EXAMPLE ENUM EXAMPLE2 %x BITEM BITEM_ITEM %s LITEM LITEM2 %% ^#[^#]*"#" /* ¥Ø¥Ã¥À¤È¥Õ¥Ã¥¿¤ò¥¹¥¥Ã¥×¤¹¤ë */ /* * ¾Ï¤Ï¡¢¤½¤Î²¼¤Ë¥¢¥¹¥¿¥ê¥¹¥¯¤ò»ý¤Á¡¢¥³¥í¥ó¤Ç½ª¤ï¤ë */ ^[^\n:]+\n[*]+\n write_block_header(CHAPTER);
^"= "[A-Z]" ="\n"="* { /* ¸Ä¡¹¤Î¥«¥Æ¥´¥ê¤´¤È¤ËÀá¤òºîÀ®¤¹¤ë */ if(need_closing == TRUE){ printf("@end table\n\n\n"); } need_closing = TRUE; write_block_header(SECTION); printf("\n\n@table @b\n"); }
"Examples:"[^\.]+ ECHO; "*"[^*\n]+"*" { /* @emph{}¡Ê¶¯Ä´¤µ¤ì¤¿¡Ë¥Æ¥¥¹¥È */ yytext[yyleng-1] = '\0'; (void)check_and_convert(&yytext[1]); printf("@i{%s}",buffer); }
"{{"[^}]+"}}" { /* ÆÃÊ̤ʶ¯Ä´ */ yytext[yyleng-2] = '\0'; (void)check_and_convert(&yytext[2]); printf("@strong{%s}",buffer); }
"{"[^}]+"}" { /* ÆÃÊ̤ʶ¯Ä´ */ yytext[yyleng-1] = '\0'; (void)check_and_convert(&yytext[1]); printf("@b{%s}",buffer); }
/* ÆÃ¼ì¤ÊTexinfoʸ»ú¤ò¥¨¥¹¥±¡¼¥×¤¹¤ë */ <INITIAL,LITEM,LITEM2,BITEM,ENUM,EXAMPLE,EXAMPLE2>"@" printf("@@"); <INITIAL,LITEM,LITEM2,BITEM,ENUM,EXAMPLE,EXAMPLE2>"{" printf("@{"); <INITIAL,LITEM,LITEM2,BITEM,ENUM,EXAMPLE,EXAMPLE2>"}" printf("@}");
/* * @example¥³¡¼¥É¤òºÆÀ¸À®¤¹¤ë */ ":"\n+[^\n0-9*]+\n" "[^ ] { int loop; int len; int cnt;
printf(":\n\n@example \n"); strcpy(buffer,yytext); len = strlen(buffer); cnt = 0; for(loop=len; loop > 0;loop--){ if(buffer[loop] == '\n') cnt++; if(cnt == 2) break; }
yyless(loop+1); statep++; states[statep] = EXAMPLE2; BEGIN(EXAMPLE2); }
<EXAMPLE,EXAMPLE2>^\n { printf("@end example\n\n"); statep--; BEGIN(states[statep]); }
/* * @enumerate¥ê¥¹¥È¤òºÆÀ¸À®¤¹¤ë */ ":"\n+[ \t]*[0-9]+"." { int loop; int len;
printf(":\n\n@enumerate \n"); strcpy(buffer,yytext); len = strlen(buffer); for(loop=len; loop > 0;loop--){ if(buffer[loop] == '\n') break; }
yyless(loop); statep++; states[statep] = ENUM; BEGIN(ENUM); }
<ENUM>"@" printf("@@"); <ENUM>":"\n+" "[^0-9] { printf(":\n\n@example\n"); statep++; states[statep] = EXAMPLE; BEGIN(EXAMPLE); }
<ENUM>\n[ \t]+[0-9]+"." { printf("\n\n@item "); } <ENUM>^[^ ] | <ENUM>\n\n\n[ \t]+[^0-9] { printf("\n\n@end enumerate\n\n"); statep--; BEGIN(states[statep]); }
/* * £±¼ïÎà¤Î@itemize¥ê¥¹¥È¤òºÆÀ¸À®¤¹¤ë */ ":"\n+":" { int loop; int len; printf(":\n\n@itemize @bullet \n"); yyless(2); statep++; states[statep] = LITEM2; BEGIN(LITEM2); }
<LITEM2>^":".+":" { (void)check_and_convert(&yytext[1]); buffer[strlen(buffer)-1]='\0'; printf("@item @b{%s:}\n",buffer); }
<LITEM2>\n\n\n+[^:\n] { printf("\n\n@end itemize\n\n"); ECHO; statep--; BEGIN(states[statep]); }
/* * ¥ê¥Ó¥¸¥ç¥ó¡¦¥Ò¥¹¥È¥êÉô¤«¤é¥ê¥¹¥È¤òºîÀ®¤¹¤ë¡£ * ¤³¤³¤Ç"Version"¤¬É¬ÍפʤΤϡ¢¤½¤¦¤·¤Ê¤¤¤È¾¤Î¥ë¡¼¥ë * ¤È¾×ÆÍ¤¹¤ë¤«¤é¤Ç¤¢¤ë */ :[\n]+"Version"[^:\n*]+":" { int loop; int len;
printf(":\n\n@itemize @bullet \n"); strcpy(buffer,yytext); len = strlen(buffer); for(loop=len; loop > 0;loop--){ if(buffer[loop] == '\n') break; }
yyless(loop); statep++; states[statep] = LITEM; BEGIN(LITEM); }
<LITEM>^.+":" { (void)check_and_convert(yytext); buffer[strlen(buffer)-1]='\0'; printf("@item @b{%s}\n\n",buffer); }
<LITEM>^[^:\n]+\n\n[^:\n]+\n { int loop; strcpy(buffer,yytext); for(loop=0; buffer[loop] != '\n'; loop++); buffer[loop] = '\0'; printf("%s\n",buffer); printf("@end itemize\n\n"); printf("%s",&buffer[loop+1]); statep--; BEGIN(states[statep]); }
/* * @itemize @bullet¥ê¥¹¥È¤òºÆÀ¸À®¤¹¤ë */ ":"\n[ ]*"*" { int loop; int len;
printf(":\n\n@itemize @bullet \n"); len = strlen(buffer); for(loop=0; loop < len;loop++){ if(buffer[loop] == '\n') break; }
yyless((len-loop)+2); statep++; states[statep] = BITEM; BEGIN(BITEM); }
<BITEM>^" "*"*" { printf("@item"); statep++; states[statep] = BITEM_ITEM; BEGIN(BITEM_ITEM); }
<BITEM>"@" printf("@@"); <BITEM>^\n { printf("@end itemize\n\n"); statep--; BEGIN(states[statep]); }
<BITEM_ITEM>[^\:]* { printf(" @b{%s}\n\n",check_and_convert(yytext)); }
<BITEM_ITEM>":" { statep--; BEGIN(states[statep]); }
/* * @chapter¡¢@sectionÅù¤òºÆºîÀ®¤¹¤ë */ ^:[^:]* { (void)check_and_convert(&yytext[1]); statep++; states[statep] = HEADING; BEGIN(HEADING); }
<HEADING>:[^\n] { printf("@item @b{%s}\n",buffer); write_underline(strlen(buffer),6,'~'); statep--; BEGIN(states[statep]); }
<HEADING>:\n"*"* { if(need_closing == TRUE){ printf("@end table\n\n\n"); need_closing = FALSE; } printf("@chapter %s\n",buffer); write_underline(strlen(buffer),9,'*'); statep--; BEGIN(states[statep]); }
<HEADING>:\n"="* { if(need_closing == TRUE){ printf("@end table\n\n\n"); need_closing = FALSE; } printf("@section %s\n",buffer); write_underline(strlen(buffer),9,'='); statep--; BEGIN(states[statep]); }
<HEADING>"@" printf("@@"); <HEADING>:\n"-"* { if(need_closing == TRUE){ printf("@end table\n\n\n"); need_closing = FALSE; } printf("@subsection %s\n",buffer); write_underline(strlen(buffer),12,'-'); statep--; BEGIN(states[statep]); }
/* * @example¥Æ¥¥¹¥È¤òºÆºîÀ®¤¹¤ë */ ^" " { printf("@example\n"); statep++; states[statep] = EXAMPLE; BEGIN(EXAMPLE); } <EXAMPLE>^" " . ECHO; %%
/* * ½é´ü²½¤·¤Æ¼Â¹Ô¤¹¤ë */ int main(int argc, char *argv[]) { states[0] = INITIAL; statep = 0; print_header(); yylex(); print_trailer(); return(0); }
¤³¤Î¥×¥í¥°¥é¥à¤Ï¡¢ ASCII¤ÎÀìÌçÍѸì¥Õ¥¡¥¤¥ë¤òÆÉ¤ß¹þ¤ó¤Ç¡¢ ¤¤¤¯¤Ä¤«¤Î¤è¤¯¸«¤é¤ì¤ë¥Ñ¥¿¡¼¥ó¤ò¸¡º÷¤·¤Þ¤¹¡£ ¤³¤Î¥Ñ¥¿¡¼¥ó¤Ï¡¢ ¥ª¥ê¥¸¥Ê¥ë¤ÎTexinfo·Á¼°¤ÎÀìÌçÍѸì¥Õ¥¡¥¤¥ë¤òñ¤Ê¤ëASCII¥Æ¥¥¹¥È¤ËÊÑ´¹¤·¤¿ºÝ¤ËºîÀ®¤µ¤ì¤¿¤â¤Î¤Ç¤¹¡£ ¤³¤ÎÊÑ´¹¤Î²áÄø¤Ç¡¢ ¿¤¯¤Î¥Þ¡¼¥¯¥¢¥Ã¥×¾ðÊ󤬼º¤ï¤ì¤Æ¤¤¤ë¤¿¤á¤Ë¡¢ ¤¢¤ë½ÐÎÏ·ë²Ì¤Î¸µ¤Ë¤Ê¤Ã¤¿¥ª¥ê¥¸¥Ê¥ë¤Î¾ðÊ󤬲¿¤Ç¤¢¤Ã¤¿¤«¡¢ ¤¢¤ë¤¤¤Ï¡¢ ¤½¤Î¥ª¥ê¥¸¥Ê¥ë¤Î¸õÊ䤬£²¤Ä£³¤Ä¤¢¤Ã¤¿¤È¤·¤Æ¤â¡¢ ¤½¤Î¤¦¤Á¤Î¤É¤ì¤¬¤½¤Î½ÐÎÏ·ë²Ì¤ò¤â¤¿¤é¤·¤¿¤«¤òÀµ³Î¤Ë·èÄꤹ¤ë¤³¤È¤¬º¤Æñ¤Ç¤¢¤ë¤È¤¤¤¦»ö¾ð¤Î¤¿¤á¡¢ ¤³¤Î¸¡º÷ºî¶È¤Ï¤¤¤¯¤é¤«Ê£»¨¤Ê¤â¤Î¤Ë¤Ê¤ê¤Þ¤¹¡£ ¤è¤¯¸«¤é¤ì¤ë¥Ñ¥¿¡¼¥ó¤ò¤¤¤¯¤Ä¤«µó¤²¤ë¤È¡¢ °Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
¤³¤ì¤é¤ÎÀèÆ¬¤Ë¤Ï¤¤¤º¤ì¤âƱ¤¸¥Ñ¥¿¡¼¥ó¤¬Íè¤Þ¤¹¡£
:some text:\n
¤³¤Î¸å¤í¤Ë¡¢ ¡Ê¾Ï¤Î¾ì¹ç¤Ï¡Ë¥¢¥¹¥¿¥ê¥¹¥¯¤Ë¤è¤ë²¼Àþ¡¢ ¡ÊÀá¤Î¾ì¹ç¤Ï¡ËÅù¹æ¤Ë¤è¤ë²¼Àþ¡¢ ¡Ê¹à¤Î¾ì¹ç¤Ï¡Ë¥Þ¥¤¥Ê¥¹µ¹æ¤Ë¤è¤ë²¼Àþ¤¬Â³¤¤Þ¤¹¡£
¤³¤ì¤Ï¾¯¤·Æñ¤·¤¤¤Î¤Ç¤¹¤¬¡¢
°ìÈÌŪ¤Ë¤Ï¶¯Ä´¤Ï¡Ê¥¤¥¿¥ê¥Ã¥¯¤Î¾ì¹ç¤Ï¡Ë*
…*
¡¢
¡Ê¶¯Ä´Ê¸»ú¡Êstrong¡Ë¤Î¾ì¹ç¤Ï¡Ë{{
…}}
¡¢
¡ÊÂÀ»ú¡Êbold¡Ë¤Î¾ì¹ç¤Ï¡Ë{
…}
¤ÎÂФˤè¤Ã¤Æ¼¨¤µ¤ì¤Þ¤¹¡£
¤³¤³¤Ç¤Ï¡¢
¤³¤Î£³¼ïÎà¤ò¸¡º÷¤·¤Æ¡¢
¥³¥Þ¥ó¥É¤ò½ÐÎϤ·¤Þ¤¹¡£
¤È¤â¤Ë¥³¥í¥ó¤Ç»Ï¤Þ¤ê¡¢ ¤½¤Î¸å¤í¤Ë¡¢ £±¤Ä°Ê¾å¤Î²þ¹Ô¡¢ ¾¯¤Ê¤¯¤È¤â£µ¤Ä¤Î¶õÇò¡¢ ¤½¤·¤ÆºÇ¸å¤Ë¿ô»ú¤â¤·¤¯¤Ï²¿¤é¤«¤Î¥Æ¥¥¹¥È¤¬Â³¤¤Þ¤¹¡£ Î㤨¤Ð¡¢ Îóµó¤µ¤ì¤¿¥ê¥¹¥È¤Ï°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
…enumerated: 0.some text 1.some more text
¤Þ¤¿¡¢ ¼ÂÎã¤Ï°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£12
…example: some text
¼ÂÎã¡¢¤ª¤è¤ÓÎóµó¤µ¤ì¤¿¥ê¥¹¥È¤Ë¤è¤¯»÷¤Æ¤¤¤Þ¤¹¤¬¡¢ °ã¤¤¤Ï¡¢ ¹àÌܤÎÀèÆ¬¤Ë¥³¥í¥ó¡¢ ¤Þ¤¿¤Ï¥¢¥¹¥¿¥ê¥¹¥¯¤¬¤¢¤ê¡¢ ËöÈø¤Ë¥³¥í¥ó¤¬¤¢¤ë¤È¤¤¤¦ÅÀ¤Ç¤¹¡£
¤³¤³¤Ç¤ÎÎã¤Ï¡¢
¥Ñ¡¼¥¹¤µ¤ì¤Æ¤¤¤ë¤â¤Î¤¬²¿¤Ç¤¢¤ë¤«¤ò¼¨¤¹¥Ò¥ó¥È¤È¤·¤Æ¤³¤Î¤è¤¦¤Ê¥Ñ¥¿¡¼¥ó¤ò»È¤¤¡¢
¤½¤ÎÆÃÄê¤Î¥»¥¯¥·¥ç¥óÍѤÎÉôʬŪ¤Ê¥Ñ¡¼¥µ¤ò
¡Ê¤Û¤È¤ó¤É¤Î¾ì¹ç¡¢ÇÓ¾Ū¡Ë¥¹¥¿¡¼¥È¾õÂÖ¤ò»È¤Ã¤Æºî¤ê¤Þ¤¹¡£
ASCIIÈǤÎÀìÌçÍѸì¥Õ¥¡¥¤¥ë¤ò»ý¤Ã¤Æ¤¤¤ë¤Î¤Ç¤¢¤ì¤Ð¡¢
¥¹¥¥ã¥Ê¤Î¤É¤ÎÉôʬ¤¬¤½¤Î¥Õ¥¡¥¤¥ëÃæ¤Î²¿¤Ë¥Þ¥Ã¥Á¤¹¤ë¤«¤ò¸¡¾Ú¤·¤Æ¤ß¤ëÃÍÂǤÁ¤¬¤¢¤ê¤Þ¤¹¡£
Î㤨¤Ð¡¢
HEADING
¾õÂ֤ˤª¤¤¤Æ@item
¤òÀ¸À®¤¹¤ë¥ë¡¼¥ë¤¬¡¢
¤¹¤Ù¤Æ¤ÎÀìÌçÍѸì¤Î¥¨¥ó¥È¥ê¤ò½èÍý¤¹¤ë¥ë¡¼¥ë¤Ç¤â¤¢¤ë¤È¤¤¤¦¤³¤È¤Ï¡¢
¤ª¤½¤é¤¯°ì¸«¤·¤¿¤À¤±¤Ç¤ÏÌÀ¤é¤«¤Ç¤Ï¤Ê¤¤¤Ç¤·¤ç¤¦¡£
Previous: Example-Pascal Lexical Scanner, Up: More Examples [Contents][Index]