Surprising output

Dec 16, 2015 at 4:53pm
Hello, I get this output when trying to run this program:

./token
char **argv
syntax error
c: c
syntax error
c: c
syntax error
c: c

Why is that?

Here is the relevant part
of the program:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75

#include <stdio.h>
#include <string.h>
#include <ctype.h>


#define MAXTOKEN 100

enum { NAME, PARENS, BRACKETS };

void dcl(void);
void dirdcl(void);

int gettoken(void);
int tokentype;             /* type of last token */
char token[MAXTOKEN];      /* last token string */
char name[MAXTOKEN];       /* identifier name */
char datatype[MAXTOKEN];   /* data type = char, int, etc. */
char out[1000];            /* output string */


int main()    /* convert declaration to words */
{
	while (gettoken() != EOF) {   /* 1st token on line */
		strcpy(datatype, token);   /* is the datatype */
		out[0] = '\0';
		dcl();            /* parse rest of line */
		if (tokentype != '\n')
			printf("syntax error\n");
		printf("%s: %s %s\n", name, out, datatype);
	   }
	   return 0;
}




/* dcl: parse a declarator */

void dcl(void)
{
	int ns;
	
	for (ns = 0; gettoken() == '*'; )  /* count *'s */
		ns++;
	dirdcl();
	while (ns-- > 0)
		strcat(out, "pointer to");
}


/* dirdcl: parse a direct declarator */

void dirdcl(void)
{
	int type;
	
	if (tokentype == '(') {
		dcl();
		if (tokentype != ')')
			printf("error: missing )\n");
	}  else if (tokentype == NAME)       /* variable name */
		strcpy(name, token);
	else
		printf("error: expected name or (dcl)\n");
	while ((type = gettoken()) == PARENS || type == BRACKETS)
		if (type == PARENS)
			strcat(out, "function returning");
	    else {
			strcat(out, " array");
			strcat(out, token);
			strcat(out, " of");
		}
}


Topic archived. No new replies allowed.