diff options
Diffstat (limited to 'doc/tools/src2html1.4a/Ctags/yacc.c')
-rw-r--r-- | doc/tools/src2html1.4a/Ctags/yacc.c | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/doc/tools/src2html1.4a/Ctags/yacc.c b/doc/tools/src2html1.4a/Ctags/yacc.c new file mode 100644 index 0000000000..f073f2bb7c --- /dev/null +++ b/doc/tools/src2html1.4a/Ctags/yacc.c @@ -0,0 +1,144 @@ +/* + * Copyright (c) 1987 The Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef lint +static char sccsid[] = "@(#)yacc.c 5.6 (Berkeley) 2/26/91"; +#endif /* not lint */ + +#include <stdio.h> +#include <string.h> +#include "ctags.h" + +/* + * y_entries: + * find the yacc tags and put them in. + */ +y_entries() +{ + register int c; + register char *sp; + register bool in_rule; + char tok[MAXTOKEN]; + + while (GETC(!=,EOF)) + switch ((char)c) { + case '\n': + SETLINE; + /* FALLTHROUGH */ + case ' ': + case '\f': + case '\r': + case '\t': + break; + case '{': + if (skip_key((int)'}')) + in_rule = NO; + break; + case '\'': + case '"': + if (skip_key(c)) + in_rule = NO; + break; + case '%': + if (GETC(==,'%')) + return; + (void)ungetc(c,inf); + break; + case '/': + if (GETC(==,'*')) + skip_comment(); + else + (void)ungetc(c,inf); + break; + case '|': + case ';': + in_rule = NO; + break; + default: + if (in_rule || !isalpha(c) && c != (int)'.' + && c != (int)'_') + break; + sp = tok; + *sp++ = c; + while (GETC(!=,EOF) && (intoken(c) || c == (int)'.')) + *sp++ = c; + *sp = EOS; + getline(); /* may change before ':' */ + while (iswhite(c)) { + if (c == (int)'\n') + SETLINE; + if (GETC(==,EOF)) + return; + } + if (c == (int)':') { + pfnote(tok,lineno); + in_rule = YES; + } + else + (void)ungetc(c,inf); + } +} + +/* + * toss_yysec -- + * throw away lines up to the next "\n%%\n" + */ +toss_yysec() +{ + register int c, /* read character */ + state; + + /* + * state == 0 : waiting + * state == 1 : received a newline + * state == 2 : received first % + * state == 3 : recieved second % + */ + lineftell = ftell(inf); + for (state = 0;GETC(!=,EOF);) + switch ((char)c) { + case '\n': + ++lineno; + lineftell = ftell(inf); + if (state == 3) /* done! */ + return; + state = 1; /* start over */ + break; + case '%': + if (state) /* if 1 or 2 */ + ++state; /* goto 3 */ + break; + default: + state = 0; /* reset */ + } +} |