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]