xref: /netbsd-src/external/bsd/flex/dist/examples/manual/j2t.lex (revision 3c3a7b7603b4ed4cb76dd5c5a3e781ddca2349bb)
1*3c3a7b76Schristos /*
2*3c3a7b76Schristos  * j2t.lex : An example of the use (possibly abuse!)
3*3c3a7b76Schristos  *           of start states.
4*3c3a7b76Schristos  */
5*3c3a7b76Schristos 
6*3c3a7b76Schristos %{
7*3c3a7b76Schristos #define MAX_STATES 1024
8*3c3a7b76Schristos #define TRUE  1
9*3c3a7b76Schristos #define FALSE 0
10*3c3a7b76Schristos 
11*3c3a7b76Schristos #define CHAPTER   "@chapter"
12*3c3a7b76Schristos #define SECTION   "@section"
13*3c3a7b76Schristos #define SSECTION  "@subsection"
14*3c3a7b76Schristos #define SSSECTION "@subsubsection"
15*3c3a7b76Schristos 
16*3c3a7b76Schristos int  states[MAX_STATES];
17*3c3a7b76Schristos int  statep = 0;
18*3c3a7b76Schristos 
19*3c3a7b76Schristos int  need_closing = FALSE;
20*3c3a7b76Schristos 
21*3c3a7b76Schristos char buffer[YY_BUF_SIZE];
22*3c3a7b76Schristos 
23*3c3a7b76Schristos extern char *yytext;
24*3c3a7b76Schristos 
25*3c3a7b76Schristos /*
26*3c3a7b76Schristos  * set up the head of the *.texinfo file the program
27*3c3a7b76Schristos  * will produce. This is a standard texinfo header.
28*3c3a7b76Schristos  */
29*3c3a7b76Schristos 
print_header(void)30*3c3a7b76Schristos void print_header(void)
31*3c3a7b76Schristos {
32*3c3a7b76Schristos    printf("\\input texinfo @c -*-texinfo-*-\n");
33*3c3a7b76Schristos    printf("@c           %c**start of header\n",'%');
34*3c3a7b76Schristos    printf("@setfilename       jargon.info\n");
35*3c3a7b76Schristos    printf("@settitle          The New Hackers Dictionary\n");
36*3c3a7b76Schristos    printf("@synindex          fn cp\n");
37*3c3a7b76Schristos    printf("@synindex          vr cp\n");
38*3c3a7b76Schristos    printf("@c           %c**end of header\n",'%');
39*3c3a7b76Schristos    printf("@setchapternewpage odd\n");
40*3c3a7b76Schristos    printf("@finalout\n");
41*3c3a7b76Schristos    printf("@c @smallbook\n");
42*3c3a7b76Schristos    printf("\n");
43*3c3a7b76Schristos    printf("@c ==========================================================\n\n");
44*3c3a7b76Schristos    printf("@c  This file was produced by j2t. Any mistakes are *not* the\n");
45*3c3a7b76Schristos    printf("@c  fault of the jargon file editors.                        \n");
46*3c3a7b76Schristos    printf("@c ==========================================================\n\n");
47*3c3a7b76Schristos    printf("@titlepage\n");
48*3c3a7b76Schristos    printf("@title     The New Hackers Dictionary\n");
49*3c3a7b76Schristos    printf("@subtitle  Version 2.9.10\n");
50*3c3a7b76Schristos    printf("@subtitle  Generated by j2t\n");
51*3c3a7b76Schristos    printf("@author    Eric S. Raymond, Guy L. Steel, Mark Crispin et al.\n");
52*3c3a7b76Schristos    printf("@end titlepage\n");
53*3c3a7b76Schristos    printf("@page\n");
54*3c3a7b76Schristos    printf("\n@c ==========================================================\n");
55*3c3a7b76Schristos    printf("\n\n");
56*3c3a7b76Schristos    printf("@unnumbered Preface\n");
57*3c3a7b76Schristos    printf("@c          *******\n");
58*3c3a7b76Schristos }
59*3c3a7b76Schristos 
60*3c3a7b76Schristos /*
61*3c3a7b76Schristos  * create the tail of the texinfo file produced.
62*3c3a7b76Schristos  */
63*3c3a7b76Schristos 
print_trailer(void)64*3c3a7b76Schristos void print_trailer(void)
65*3c3a7b76Schristos {
66*3c3a7b76Schristos    printf("\n@c ==========================================================\n");
67*3c3a7b76Schristos    printf("@contents\n");   /* print the table of contents */
68*3c3a7b76Schristos    printf("@bye\n\n");
69*3c3a7b76Schristos }
70*3c3a7b76Schristos 
71*3c3a7b76Schristos /*
72*3c3a7b76Schristos  * write an underline under a section
73*3c3a7b76Schristos  * or chapter so we can find it later.
74*3c3a7b76Schristos  */
75*3c3a7b76Schristos 
write_underline(int len,int space,char ch)76*3c3a7b76Schristos void write_underline(int len, int space, char ch)
77*3c3a7b76Schristos {
78*3c3a7b76Schristos   int loop;
79*3c3a7b76Schristos 
80*3c3a7b76Schristos   printf("@c ");
81*3c3a7b76Schristos 
82*3c3a7b76Schristos   for(loop=3; loop<space; loop++){
83*3c3a7b76Schristos     printf(" ");
84*3c3a7b76Schristos   }
85*3c3a7b76Schristos 
86*3c3a7b76Schristos   while(len--){
87*3c3a7b76Schristos     printf("%c",ch);
88*3c3a7b76Schristos   }
89*3c3a7b76Schristos   printf("\n\n");
90*3c3a7b76Schristos }
91*3c3a7b76Schristos 
92*3c3a7b76Schristos /*
93*3c3a7b76Schristos  * check for texinfo special characters
94*3c3a7b76Schristos  * and escape them
95*3c3a7b76Schristos  */
96*3c3a7b76Schristos 
check_and_convert(char * string)97*3c3a7b76Schristos char *check_and_convert(char *string)
98*3c3a7b76Schristos {
99*3c3a7b76Schristos   int  buffpos = 0;
100*3c3a7b76Schristos   int  len,loop;
101*3c3a7b76Schristos 
102*3c3a7b76Schristos   len = strlen(string);
103*3c3a7b76Schristos   for(loop=0; loop<len; loop++){
104*3c3a7b76Schristos     if(string[loop] == '@' || string[loop] == '{' || string[loop] == '}'){
105*3c3a7b76Schristos       buffer[buffpos++] = '@';
106*3c3a7b76Schristos       buffer[buffpos++] = string[loop];
107*3c3a7b76Schristos     } else {
108*3c3a7b76Schristos       buffer[buffpos++] = string[loop];
109*3c3a7b76Schristos     }
110*3c3a7b76Schristos   }
111*3c3a7b76Schristos   buffer[buffpos] = '\0';
112*3c3a7b76Schristos   return(buffer);
113*3c3a7b76Schristos }
114*3c3a7b76Schristos 
115*3c3a7b76Schristos /*
116*3c3a7b76Schristos  * write out a chapter,section, or subsection
117*3c3a7b76Schristos  * header
118*3c3a7b76Schristos  */
119*3c3a7b76Schristos 
write_block_header(char * type)120*3c3a7b76Schristos void write_block_header(char *type)
121*3c3a7b76Schristos {
122*3c3a7b76Schristos   int loop;
123*3c3a7b76Schristos   int len;
124*3c3a7b76Schristos 
125*3c3a7b76Schristos   (void)check_and_convert(yytext);
126*3c3a7b76Schristos   len = strlen(buffer);
127*3c3a7b76Schristos   for(loop=0; buffer[loop] != '\n';loop++)
128*3c3a7b76Schristos          ;
129*3c3a7b76Schristos   buffer[loop] = '\0';
130*3c3a7b76Schristos   printf("%s %s\n",type,buffer);
131*3c3a7b76Schristos   write_underline(strlen(buffer),strlen(type)+1,'*');
132*3c3a7b76Schristos }
133*3c3a7b76Schristos 
134*3c3a7b76Schristos %}
135*3c3a7b76Schristos 
136*3c3a7b76Schristos /*
137*3c3a7b76Schristos  * the flex description starts here
138*3c3a7b76Schristos  */
139*3c3a7b76Schristos 
140*3c3a7b76Schristos %x HEADING EXAMPLE ENUM EXAMPLE2
141*3c3a7b76Schristos %x BITEM BITEM_ITEM
142*3c3a7b76Schristos %s LITEM LITEM2
143*3c3a7b76Schristos 
144*3c3a7b76Schristos %%
145*3c3a7b76Schristos 
146*3c3a7b76Schristos ^#[^#]*"#"  /* skip the header & trailer */
147*3c3a7b76Schristos                      /* chapters have asterisks under them
148*3c3a7b76Schristos                       * and are terminated by a colon
149*3c3a7b76Schristos                       */
150*3c3a7b76Schristos ^[^\n:]+\n[*]+\n      write_block_header(CHAPTER);
151*3c3a7b76Schristos 
152*3c3a7b76Schristos ^"= "[A-Z]" ="\n"="*  { /* we create a seciton for each category */
153*3c3a7b76Schristos                         if(need_closing == TRUE){
154*3c3a7b76Schristos                           printf("@end table\n\n\n");
155*3c3a7b76Schristos                         }
156*3c3a7b76Schristos                         need_closing = TRUE;
157*3c3a7b76Schristos                         write_block_header(SECTION);
158*3c3a7b76Schristos                         printf("\n\n@table @b\n");
159*3c3a7b76Schristos                       }
160*3c3a7b76Schristos 
161*3c3a7b76Schristos "Examples:"[^\.]+     ECHO;
162*3c3a7b76Schristos 
163*3c3a7b76Schristos "*"[^*\n]+"*"         { /* @emph{}(emphasized) text */
164*3c3a7b76Schristos                         yytext[yyleng-1] = '\0';
165*3c3a7b76Schristos                         (void)check_and_convert(&yytext[1]);
166*3c3a7b76Schristos                         printf("@i{%s}",buffer);
167*3c3a7b76Schristos                       }
168*3c3a7b76Schristos 
169*3c3a7b76Schristos "{{"[^}]+"}}"         { /* special emphasis */
170*3c3a7b76Schristos                         yytext[yyleng-2] = '\0';
171*3c3a7b76Schristos                         (void)check_and_convert(&yytext[2]);
172*3c3a7b76Schristos                         printf("@b{%s}",buffer);
173*3c3a7b76Schristos                       }
174*3c3a7b76Schristos 
175*3c3a7b76Schristos "{"[^}]+"}"           { /* special emphasis */
176*3c3a7b76Schristos                         yytext[yyleng-1] = '\0';
177*3c3a7b76Schristos                         (void)check_and_convert(&yytext[1]);
178*3c3a7b76Schristos                         printf("@b{%s}",buffer);
179*3c3a7b76Schristos                       }
180*3c3a7b76Schristos 
181*3c3a7b76Schristos  /* escape some special texinfo characters */
182*3c3a7b76Schristos <INITIAL,LITEM,LITEM2,BITEM,ENUM,EXAMPLE,EXAMPLE2>"@"  printf("@@");
183*3c3a7b76Schristos <INITIAL,LITEM,LITEM2,BITEM,ENUM,EXAMPLE,EXAMPLE2>"{"  printf("@{");
184*3c3a7b76Schristos <INITIAL,LITEM,LITEM2,BITEM,ENUM,EXAMPLE,EXAMPLE2>"}"  printf("@}");
185*3c3a7b76Schristos 
186*3c3a7b76Schristos  /*
187*3c3a7b76Schristos   * reproduce @example code
188*3c3a7b76Schristos   */
189*3c3a7b76Schristos 
190*3c3a7b76Schristos ":"\n+[^\n0-9*]+\n"     "[^ ]   {
191*3c3a7b76Schristos                         int loop;
192*3c3a7b76Schristos                         int len;
193*3c3a7b76Schristos                         int cnt;
194*3c3a7b76Schristos 
195*3c3a7b76Schristos                         printf(":\n\n@example \n");
196*3c3a7b76Schristos                         strcpy(buffer,yytext);
197*3c3a7b76Schristos                         len = strlen(buffer);
198*3c3a7b76Schristos                         cnt = 0;
199*3c3a7b76Schristos                         for(loop=len; loop > 0;loop--){
200*3c3a7b76Schristos                           if(buffer[loop] == '\n')
201*3c3a7b76Schristos                              cnt++;
202*3c3a7b76Schristos                           if(cnt == 2)
203*3c3a7b76Schristos                               break;
204*3c3a7b76Schristos                         }
205*3c3a7b76Schristos                         yyless(loop+1);
206*3c3a7b76Schristos                         statep++;
207*3c3a7b76Schristos                         states[statep] = EXAMPLE2;
208*3c3a7b76Schristos                         BEGIN(EXAMPLE2);
209*3c3a7b76Schristos                       }
210*3c3a7b76Schristos <EXAMPLE,EXAMPLE2>^\n  {
211*3c3a7b76Schristos                       printf("@end example\n\n");
212*3c3a7b76Schristos                       statep--;
213*3c3a7b76Schristos                       BEGIN(states[statep]);
214*3c3a7b76Schristos                     }
215*3c3a7b76Schristos 
216*3c3a7b76Schristos  /*
217*3c3a7b76Schristos   * repoduce @enumerate lists
218*3c3a7b76Schristos   */
219*3c3a7b76Schristos 
220*3c3a7b76Schristos ":"\n+[ \t]*[0-9]+"."   {
221*3c3a7b76Schristos                       int loop;
222*3c3a7b76Schristos                       int len;
223*3c3a7b76Schristos 
224*3c3a7b76Schristos                       printf(":\n\n@enumerate \n");
225*3c3a7b76Schristos                       strcpy(buffer,yytext);
226*3c3a7b76Schristos                       len = strlen(buffer);
227*3c3a7b76Schristos                       for(loop=len; loop > 0;loop--){
228*3c3a7b76Schristos                         if(buffer[loop] == '\n')
229*3c3a7b76Schristos                            break;
230*3c3a7b76Schristos                       }
231*3c3a7b76Schristos                       yyless(loop);
232*3c3a7b76Schristos                       statep++;
233*3c3a7b76Schristos                       states[statep] = ENUM;
234*3c3a7b76Schristos                       BEGIN(ENUM);
235*3c3a7b76Schristos                     }
236*3c3a7b76Schristos 
237*3c3a7b76Schristos <ENUM>"@"           printf("@@");
238*3c3a7b76Schristos <ENUM>":"\n+"     "[^0-9]    {
239*3c3a7b76Schristos                     printf(":\n\n@example\n");
240*3c3a7b76Schristos                     statep++;
241*3c3a7b76Schristos                     states[statep] = EXAMPLE;
242*3c3a7b76Schristos                     BEGIN(EXAMPLE);
243*3c3a7b76Schristos                   }
244*3c3a7b76Schristos 
245*3c3a7b76Schristos 
246*3c3a7b76Schristos <ENUM>\n[ \t]+[0-9]+"." {
247*3c3a7b76Schristos                     printf("\n\n@item ");
248*3c3a7b76Schristos                    }
249*3c3a7b76Schristos <ENUM>^[^ ] |
250*3c3a7b76Schristos <ENUM>\n\n\n[ \t]+[^0-9] {
251*3c3a7b76Schristos                     printf("\n\n@end enumerate\n\n");
252*3c3a7b76Schristos                     statep--;
253*3c3a7b76Schristos                     BEGIN(states[statep]);
254*3c3a7b76Schristos                   }
255*3c3a7b76Schristos 
256*3c3a7b76Schristos  /*
257*3c3a7b76Schristos   * reproduce one kind of @itemize list
258*3c3a7b76Schristos   */
259*3c3a7b76Schristos 
260*3c3a7b76Schristos ":"\n+":"         {
261*3c3a7b76Schristos                     int loop;
262*3c3a7b76Schristos                     int len;
263*3c3a7b76Schristos 
264*3c3a7b76Schristos                     printf(":\n\n@itemize @bullet \n");
265*3c3a7b76Schristos                     yyless(2);
266*3c3a7b76Schristos                     statep++;
267*3c3a7b76Schristos                     states[statep] = LITEM2;
268*3c3a7b76Schristos                     BEGIN(LITEM2);
269*3c3a7b76Schristos                   }
270*3c3a7b76Schristos <LITEM2>^":".+":" {
271*3c3a7b76Schristos                     (void)check_and_convert(&yytext[1]);
272*3c3a7b76Schristos                     buffer[strlen(buffer)-1]='\0';
273*3c3a7b76Schristos                     printf("@item @b{%s:}\n",buffer);
274*3c3a7b76Schristos                   }
275*3c3a7b76Schristos 
276*3c3a7b76Schristos <LITEM2>\n\n\n+[^:\n] {
277*3c3a7b76Schristos                     printf("\n\n@end itemize\n\n");
278*3c3a7b76Schristos                     ECHO;
279*3c3a7b76Schristos                     statep--;
280*3c3a7b76Schristos                     BEGIN(states[statep]);
281*3c3a7b76Schristos                   }
282*3c3a7b76Schristos 
283*3c3a7b76Schristos  /*
284*3c3a7b76Schristos   * create a list out of the revision history part.
285*3c3a7b76Schristos   * We need the "Version" for this because it
286*3c3a7b76Schristos   * clashes with other rules otherwise.
287*3c3a7b76Schristos   */
288*3c3a7b76Schristos 
289*3c3a7b76Schristos :[\n]+"Version"[^:\n*]+":" {
290*3c3a7b76Schristos                     int loop;
291*3c3a7b76Schristos                     int len;
292*3c3a7b76Schristos 
293*3c3a7b76Schristos                     printf(":\n\n@itemize @bullet \n");
294*3c3a7b76Schristos                     strcpy(buffer,yytext);
295*3c3a7b76Schristos                     len = strlen(buffer);
296*3c3a7b76Schristos                     for(loop=len; loop > 0;loop--){
297*3c3a7b76Schristos                       if(buffer[loop] == '\n')
298*3c3a7b76Schristos                          break;
299*3c3a7b76Schristos                     }
300*3c3a7b76Schristos                     yyless(loop);
301*3c3a7b76Schristos                     statep++;
302*3c3a7b76Schristos                     states[statep] = LITEM;
303*3c3a7b76Schristos                     BEGIN(LITEM);
304*3c3a7b76Schristos                   }
305*3c3a7b76Schristos <LITEM>^.+":"     {
306*3c3a7b76Schristos                     (void)check_and_convert(yytext);
307*3c3a7b76Schristos                     buffer[strlen(buffer)-1]='\0';
308*3c3a7b76Schristos                     printf("@item @b{%s}\n\n",buffer);
309*3c3a7b76Schristos                   }
310*3c3a7b76Schristos 
311*3c3a7b76Schristos <LITEM>^[^:\n]+\n\n[^:\n]+\n  {
312*3c3a7b76Schristos                     int loop;
313*3c3a7b76Schristos 
314*3c3a7b76Schristos                     strcpy(buffer,yytext);
315*3c3a7b76Schristos                     for(loop=0; buffer[loop] != '\n'; loop++);
316*3c3a7b76Schristos                     buffer[loop] = '\0';
317*3c3a7b76Schristos                     printf("%s\n",buffer);
318*3c3a7b76Schristos                     printf("@end itemize\n\n");
319*3c3a7b76Schristos                     printf("%s",&buffer[loop+1]);
320*3c3a7b76Schristos                     statep--;
321*3c3a7b76Schristos                     BEGIN(states[statep]);
322*3c3a7b76Schristos                   }
323*3c3a7b76Schristos 
324*3c3a7b76Schristos  /*
325*3c3a7b76Schristos   * reproduce @itemize @bullet lists
326*3c3a7b76Schristos   */
327*3c3a7b76Schristos 
328*3c3a7b76Schristos ":"\n[ ]*"*"      {
329*3c3a7b76Schristos                     int loop;
330*3c3a7b76Schristos                     int len;
331*3c3a7b76Schristos 
332*3c3a7b76Schristos                     printf(":\n\n@itemize @bullet \n");
333*3c3a7b76Schristos                     len = strlen(buffer);
334*3c3a7b76Schristos                     for(loop=0; loop < len;loop++){
335*3c3a7b76Schristos                       if(buffer[loop] == '\n')
336*3c3a7b76Schristos                          break;
337*3c3a7b76Schristos                     }
338*3c3a7b76Schristos                     yyless((len-loop)+2);
339*3c3a7b76Schristos                     statep++;
340*3c3a7b76Schristos                     states[statep] = BITEM;
341*3c3a7b76Schristos                     BEGIN(BITEM);
342*3c3a7b76Schristos                   }
343*3c3a7b76Schristos 
344*3c3a7b76Schristos <BITEM>^" "*"*"   {
345*3c3a7b76Schristos                     printf("@item");
346*3c3a7b76Schristos                     statep++;
347*3c3a7b76Schristos                     states[statep] = BITEM_ITEM;
348*3c3a7b76Schristos                     BEGIN(BITEM_ITEM);
349*3c3a7b76Schristos                   }
350*3c3a7b76Schristos <BITEM>"@"          printf("@@");
351*3c3a7b76Schristos <BITEM>^\n        {
352*3c3a7b76Schristos                     printf("@end itemize\n\n");
353*3c3a7b76Schristos                     statep--;
354*3c3a7b76Schristos                     BEGIN(states[statep]);
355*3c3a7b76Schristos                   }
356*3c3a7b76Schristos <BITEM_ITEM>[^\:]* {
357*3c3a7b76Schristos                      printf(" @b{%s}\n\n",check_and_convert(yytext));
358*3c3a7b76Schristos                    }
359*3c3a7b76Schristos <BITEM_ITEM>":"   {
360*3c3a7b76Schristos                     statep--;
361*3c3a7b76Schristos                     BEGIN(states[statep]);
362*3c3a7b76Schristos                   }
363*3c3a7b76Schristos 
364*3c3a7b76Schristos  /*
365*3c3a7b76Schristos   * recreate @chapter, @section etc.
366*3c3a7b76Schristos   */
367*3c3a7b76Schristos 
368*3c3a7b76Schristos ^:[^:]*           {
369*3c3a7b76Schristos                     (void)check_and_convert(&yytext[1]);
370*3c3a7b76Schristos                     statep++;
371*3c3a7b76Schristos                     states[statep] = HEADING;
372*3c3a7b76Schristos                     BEGIN(HEADING);
373*3c3a7b76Schristos                   }
374*3c3a7b76Schristos <HEADING>:[^\n]   {
375*3c3a7b76Schristos                     printf("@item @b{%s}\n",buffer);
376*3c3a7b76Schristos                     write_underline(strlen(buffer),6,'~');
377*3c3a7b76Schristos                     statep--;
378*3c3a7b76Schristos                     BEGIN(states[statep]);
379*3c3a7b76Schristos                   }
380*3c3a7b76Schristos <HEADING>:\n"*"*  {
381*3c3a7b76Schristos                     if(need_closing == TRUE){
382*3c3a7b76Schristos                       printf("@end table\n\n\n");
383*3c3a7b76Schristos                       need_closing = FALSE;
384*3c3a7b76Schristos                     }
385*3c3a7b76Schristos                     printf("@chapter %s\n",buffer);
386*3c3a7b76Schristos                     write_underline(strlen(buffer),9,'*');
387*3c3a7b76Schristos                     statep--;
388*3c3a7b76Schristos                     BEGIN(states[statep]);
389*3c3a7b76Schristos                   }
390*3c3a7b76Schristos <HEADING>:\n"="*  {
391*3c3a7b76Schristos                     if(need_closing == TRUE){
392*3c3a7b76Schristos                      printf("@end table\n\n\n");
393*3c3a7b76Schristos                       need_closing = FALSE;
394*3c3a7b76Schristos                     }
395*3c3a7b76Schristos                     printf("@section %s\n",buffer);
396*3c3a7b76Schristos                     write_underline(strlen(buffer),9,'=');
397*3c3a7b76Schristos                     statep--;
398*3c3a7b76Schristos                     BEGIN(states[statep]);
399*3c3a7b76Schristos                   }
400*3c3a7b76Schristos <HEADING>"@"        printf("@@");
401*3c3a7b76Schristos <HEADING>:\n"-"*  {
402*3c3a7b76Schristos                     if(need_closing == TRUE){
403*3c3a7b76Schristos                       printf("@end table\n\n\n");
404*3c3a7b76Schristos                       need_closing = FALSE;
405*3c3a7b76Schristos                     }
406*3c3a7b76Schristos                     printf("@subsection %s\n",buffer);
407*3c3a7b76Schristos                     write_underline(strlen(buffer),12,'-');
408*3c3a7b76Schristos                     statep--;
409*3c3a7b76Schristos                     BEGIN(states[statep]);
410*3c3a7b76Schristos                   }
411*3c3a7b76Schristos 
412*3c3a7b76Schristos  /*
413*3c3a7b76Schristos   * recreate @example text
414*3c3a7b76Schristos   */
415*3c3a7b76Schristos 
416*3c3a7b76Schristos ^"     "          {
417*3c3a7b76Schristos                     printf("@example\n");
418*3c3a7b76Schristos                     statep++;
419*3c3a7b76Schristos                     states[statep] = EXAMPLE;
420*3c3a7b76Schristos                     BEGIN(EXAMPLE);
421*3c3a7b76Schristos                   }
422*3c3a7b76Schristos <EXAMPLE>^"     "
423*3c3a7b76Schristos .                 ECHO;
424*3c3a7b76Schristos 
425*3c3a7b76Schristos %%
426*3c3a7b76Schristos 
427*3c3a7b76Schristos /*
428*3c3a7b76Schristos  * initialise and go.
429*3c3a7b76Schristos  */
430*3c3a7b76Schristos 
431*3c3a7b76Schristos int main(int argc, char *argv[])
432*3c3a7b76Schristos {
433*3c3a7b76Schristos   states[0] = INITIAL;
434*3c3a7b76Schristos   statep    = 0;
435*3c3a7b76Schristos   print_header();
436*3c3a7b76Schristos   yylex();
437*3c3a7b76Schristos   print_trailer();
438*3c3a7b76Schristos   return(0);
439*3c3a7b76Schristos }
440*3c3a7b76Schristos 
441*3c3a7b76Schristos 
442*3c3a7b76Schristos 
443