1: # include <stdio.h>
2: # include "constants.h"
3: # include "globals.h"
4: # include <sccs.h>
5:
6: (@(#)comment.c 8.1 12/31/84)
7:
8:
9: /*
10: ** COMMENT.C -- routine to scan comments inside an equel statement
11: **
12: ** Uses the endcmnt token code to find the endcmnt
13: ** terminal string, then reads the input until it sees this
14: ** terminal (must be <= 2 characters), returning EOF_TOK and
15: ** giving an error diagnostic if end-of-file is encountered.
16: **
17: ** Parameters:
18: ** none
19: **
20: ** Returns:
21: ** CONTINUE -- valid comment
22: ** EOF_TOK -- EOF in comment
23: **
24: ** Side Effects:
25: ** deletes comments from within an equel statement
26: */
27:
28:
29: comment()
30: {
31: register int i, l;
32: register struct optab *op;
33: char buf [3];
34:
35: /* find end of comment operator */
36: for (op = Optab; op->op_term; op++)
37: if (op->op_token == Tokens.sp_endcmnt)
38: break;
39:
40: if (!op->op_term)
41: syserr("no end of comment operator in the parse tables");
42: /* scan for the end of comment */
43: l = length(op->op_term);
44: if (l > sizeof buf - 1)
45: syserr("comment : buf too short for endcmnt %s %d",
46: op->op_term, l);
47:
48: /* fill buffer to length of endmnt terminal */
49: for (i = 0; i < l; i++)
50: {
51: if ((buf [i] = getch()) == EOF_TOK)
52: {
53: :
54: /* non-terminated comment */
55: yysemerr("premature EOF encountered in comment", 0);
56: return (EOF_TOK);
57: }
58: }
59:
60: /* shift on input until endcmnt */
61: while (!bequal(buf, op->op_term, l))
62: {
63: for (i = 0; i < l - 1; i++)
64: buf [i] = buf [i + 1];
65: if ((buf [l - 1] = getch()) == EOF_TOK)
66: goto nontermcom;
67: }
68: return (CONTINUE);
69: }
Defined functions
defined in line
6; used 1 times